diff --git src/wp-includes/class-wp-customize-nav-menus.php src/wp-includes/class-wp-customize-nav-menus.php
index 126b9f0..0ccc3e8 100644
--- src/wp-includes/class-wp-customize-nav-menus.php
+++ src/wp-includes/class-wp-customize-nav-menus.php
@@ -76,8 +76,32 @@ final class WP_Customize_Nav_Menus {
 			wp_send_json_error( array( 'message' => __( 'Missing obj_type or type param.' ) ) );
 		}
 
-		$obj_type = sanitize_key( $_POST['obj_type'] );
-		if ( ! in_array( $obj_type, array( 'post_type', 'taxonomy' ) ) ) {
+		$obj_type        = sanitize_key( $_POST['obj_type'] );
+		$valid_obj_types = array();
+
+		if ( empty( $this->items ) ) {
+			$this->items = $this->available_item_types();
+
+			foreach ( $this->items as $item_types ) {
+				// Continue if no item types set for the item
+				if ( empty( $item_types ) ) {
+					continue;
+				}
+
+				// Loop through item types to set valid types
+				foreach( $item_types as $item_type ) {
+					if ( isset( $item_type['type'] ) && ! in_array( $item_type['type'], $valid_obj_types ) ) {
+						$valid_obj_types[] = $item_type['type'];
+					}
+				}
+			}
+
+		// Defaults to post_type & taxonomy objects
+		} else {
+			$valid_obj_types = array( 'post_type', 'taxonomy' );
+		}
+
+		if ( ! in_array( $obj_type, $valid_obj_types ) ) {
 			wp_send_json_error( array( 'message' => __( 'Invalid obj_type param: ' . $obj_type ) ) );
 		}
 		$taxonomy_or_post_type = sanitize_key( $_POST['type'] );
@@ -145,6 +169,23 @@ final class WP_Customize_Nav_Menus {
 					'object_id'  => $term->term_id,
 				);
 			}
+
+		// Let plugins populate their custom items
+		} else {
+			$custom_obj_types = array_diff( $valid_obj_types, array( 'post_type', 'taxonomy' ) );
+
+			if ( ! empty( $custom_obj_types ) ) {
+				foreach( $custom_obj_types as $custom_obj_type ) {
+					/**
+					 * Filter here to add your custom items
+					 *
+					 * @param array  $items
+					 * @param string $taxonomy_or_post_type the requested type
+					 * @param int    $page the page num being requested
+					 */
+					$items = apply_filters( "customizer_nav_menus_{$custom_obj_type}_get_items", array(), $taxonomy_or_post_type, $page );
+				}
+			}
 		}
 
 		wp_send_json_success( array( 'items' => $items ) );
@@ -531,22 +572,36 @@ final class WP_Customize_Nav_Menus {
 		);
 
 		$post_types = get_post_types( array( 'show_in_nav_menus' => true ), 'objects' );
-		foreach ( $post_types as $slug => $post_type ) {
-			$items['postTypes'][ $slug ] = array(
-				'label' => $post_type->labels->singular_name,
-			);
+
+		if ( $post_types ) {
+			foreach ( $post_types as $slug => $post_type ) {
+				$items['postTypes'][ $slug ] = array(
+					'label' => $post_type->labels->singular_name,
+					'name'  => $post_type->name,
+					'type'  => 'post_type',
+				);
+			}
 		}
 
 		$taxonomies = get_taxonomies( array( 'show_in_nav_menus' => true ), 'objects' );
-		foreach ( $taxonomies as $slug => $taxonomy ) {
-			if ( 'post_format' === $taxonomy && ! current_theme_supports( 'post-formats' ) ) {
-				continue;
+
+		if ( $taxonomies ) {
+			foreach ( $taxonomies as $slug => $taxonomy ) {
+				if ( 'post_format' === $taxonomy && ! current_theme_supports( 'post-formats' ) ) {
+					continue;
+				}
+				$items['taxonomies'][ $slug ] = array(
+					'label' => $taxonomy->labels->singular_name,
+					'name'  => $taxonomy->name,
+					'type'  => 'taxonomy',
+				);
 			}
-			$items['taxonomies'][ $slug ] = array(
-				'label' => $taxonomy->labels->singular_name,
-			);
 		}
-		return $items;
+
+		// Allow plugins to add their custom types
+		$this->items = apply_filters( 'customizer_nav_menus_item_types', $items );
+
+		return $this->items;
 	}
 
 	/**
@@ -649,32 +704,28 @@ final class WP_Customize_Nav_Menus {
 				</div>
 			</div>
 			<?php
-
 			// @todo: consider using add_meta_box/do_accordion_section and making screen-optional?
 			// Containers for per-post-type item browsing; items added with JS.
-			$post_types = get_post_types( array( 'show_in_nav_menus' => true ), 'object' );
-			if ( $post_types ) :
-				foreach ( $post_types as $type ) :
-					?>
-					<div id="available-menu-items-<?php echo esc_attr( $type->name ); ?>" class="accordion-section">
-						<h4 class="accordion-section-title"><?php echo esc_html( $type->label ); ?> <span class="spinner"></span> <button type="button" class="not-a-button"><span class="screen-reader-text"><?php _e( 'Toggle' ); ?></span></button></h4>
-						<div class="accordion-section-content" data-type="<?php echo esc_attr( $type->name ); ?>" data-obj_type="post_type"></div>
-					</div>
-				<?php
-				endforeach;
-			endif;
-
-			$taxonomies = get_taxonomies( array( 'show_in_nav_menus' => true ), 'object' );
-			if ( $taxonomies ) :
-				foreach ( $taxonomies as $tax ) :
-					?>
-					<div id="available-menu-items-<?php echo esc_attr( $tax->name ); ?>" class="accordion-section">
-						<h4 class="accordion-section-title"><?php echo esc_html( $tax->label ); ?> <span class="spinner"></span> <button type="button" class="not-a-button"><span class="screen-reader-text"><?php _e( 'Toggle' ); ?></span></button></h4>
-						<div class="accordion-section-content" data-type="<?php echo esc_attr( $tax->name ); ?>" data-obj_type="taxonomy"></div>
+
+			// Stop if no items set
+			if ( empty( $this->items ) ) {
+				return;
+			}
+
+			foreach ( $this->items as $item_types ) {
+				// Continue if no item types set for the item
+				if ( empty( $item_types ) ) {
+					continue;
+				}
+
+				// Loop through item types to build templates
+				foreach( $item_types as $item_type ) : ?>
+					<div id="available-menu-items-<?php echo esc_attr( $item_type['name'] ); ?>" class="accordion-section">
+						<h4 class="accordion-section-title"><?php echo esc_html( $item_type['label'] ); ?> <span class="spinner"></span> <button type="button" class="not-a-button"><span class="screen-reader-text"><?php _e( 'Toggle' ); ?></span></button></h4>
+						<div class="accordion-section-content" data-type="<?php echo esc_attr( $item_type['name'] ); ?>" data-obj_type="<?php echo esc_attr( $item_type['type'] ); ?>"></div>
 					</div>
-				<?php
-				endforeach;
-			endif;
+				<?php endforeach;
+			}
 			?>
 		</div><!-- #available-menu-items -->
 	<?php
