Index: src/wp-admin/css/customize-nav-menus.css
===================================================================
--- src/wp-admin/css/customize-nav-menus.css	(revision 37460)
+++ src/wp-admin/css/customize-nav-menus.css	(working copy)
@@ -479,7 +479,7 @@
 	color: #23282d;
 }
 
-#available-menu-items .accordion-section-content {
+#available-menu-items .available-menu-items-list {
 	overflow-y: auto;
 	max-height: 200px; /* This gets set in JS to fit the screen size, and based on # of sections. */
 	background: transparent;
@@ -516,11 +516,49 @@
 }
 
 #available-menu-items .accordion-section-content {
-	padding: 1px 15px 15px 15px;
+	max-height: 290px;
 	margin: 0;
-	max-height: 290px;
+	padding: 0;
+	position: relative;
+	background: transparent;
 }
 
+#available-menu-items .accordion-section-content .available-menu-items-list {
+	margin: 0 0 45px 0;
+	padding: 1px 15px 15px 15px;
+}
+
+#available-menu-items .accordion-section-content .available-menu-items-list:only-child { /* Types that do not support new items for the current user */
+	margin-bottom: 0;
+}
+
+#new-custom-menu-item .accordion-section-content {
+	padding: 0 15px 15px 15px;
+}
+
+#available-menu-items .accordion-section-content .new-content-item {
+	width: calc(100% - 30px);
+	padding: 8px 15px;
+	position: absolute;
+	bottom: 0;
+	z-index: 10;
+	background: #eee;
+}
+
+#available-menu-items .new-content-item .add-content {
+	float: right;
+	padding-left: 6px;
+}
+
+#available-menu-items .new-content-item .add-content:before {
+	content: "\f543";
+	font: 20px/16px dashicons;
+	position: relative;
+	display: inline-block;
+	top: 5px;
+	left: -2px;
+}
+
 #available-menu-items .menu-item-tpl {
 	margin: 0;
 }
Index: src/wp-admin/js/customize-nav-menus.js
===================================================================
--- src/wp-admin/js/customize-nav-menus.js	(revision 37460)
+++ src/wp-admin/js/customize-nav-menus.js	(working copy)
@@ -124,7 +124,7 @@
 			}
 
 			this.$search = $( '#menu-items-search' );
-			this.sectionContent = this.$el.find( '.accordion-section-content' );
+			this.sectionContent = this.$el.find( '.available-menu-items-list' );
 
 			this.debounceSearch = _.debounce( self.search, 500 );
 
@@ -168,7 +168,7 @@
 
 			// Load more items.
 			this.sectionContent.scroll( function() {
-				var totalHeight = self.$el.find( '.accordion-section.open .accordion-section-content' ).prop( 'scrollHeight' ),
+				var totalHeight = self.$el.find( '.accordion-section.open .available-menu-items-list' ).prop( 'scrollHeight' ),
 					visibleHeight = self.$el.find( '.accordion-section.open' ).height();
 
 				if ( ! self.loading && $( this ).scrollTop() > 3 / 4 * totalHeight - visibleHeight ) {
@@ -349,7 +349,7 @@
 				}
 				items = new api.Menus.AvailableItemCollection( items ); // @todo Why is this collection created and then thrown away?
 				self.collection.add( items.models );
-				typeInner = availableMenuItemContainer.find( '.accordion-section-content' );
+				typeInner = availableMenuItemContainer.find( '.available-menu-items-list' );
 				items.each(function( menuItem ) {
 					typeInner.append( itemTemplate( menuItem.attributes ) );
 				});
@@ -368,14 +368,23 @@
 
 		// Adjust the height of each section of items to fit the screen.
 		itemSectionHeight: function() {
-			var sections, totalHeight, accordionHeight, diff;
+			var sections, lists, totalHeight, accordionHeight, diff, totalWidth, button, buttonWidth;
 			totalHeight = window.innerHeight;
 			sections = this.$el.find( '.accordion-section:not( #available-menu-items-search ) .accordion-section-content' );
-			accordionHeight =  46 * ( 2 + sections.length ) - 13; // Magic numbers.
+			lists = this.$el.find( '.accordion-section:not( #available-menu-items-search ) .available-menu-items-list:not(":only-child")' );
+			accordionHeight =  46 * ( 1 + sections.length ) + 14; // Magic numbers.
 			diff = totalHeight - accordionHeight;
 			if ( 120 < diff && 290 > diff ) {
 				sections.css( 'max-height', diff );
+				lists.css( 'max-height', ( diff - 60 ) );
 			}
+			// Fit the new-content input and button in the available space.
+			totalWidth = this.$el.width();
+			// Clone button to get width of invisible element.
+			button = this.$el.find( '.accordion-section .new-content-item .add-content' ).first().clone().appendTo( 'body' ).css({ 'display': 'block', 'visibility': 'hidden' });
+			buttonWidth = button.outerWidth();
+			button.remove();
+			this.$el.find( '.accordion-section .new-content-item .create-item-input' ).width( ( totalWidth - buttonWidth - 70 ) ); // 70 = additional margins and padding.
 		},
 
 		// Highlights a menu item.
Index: src/wp-includes/class-wp-customize-nav-menus.php
===================================================================
--- src/wp-includes/class-wp-customize-nav-menus.php	(revision 37460)
+++ src/wp-includes/class-wp-customize-nav-menus.php	(working copy)
@@ -763,7 +763,7 @@
 					<span class="spinner"></span>
 					<span class="clear-results"><span class="screen-reader-text"><?php _e( 'Clear Results' ); ?></span></span>
 				</div>
-				<ul class="accordion-section-content" data-type="search"></ul>
+				<ul class="accordion-section-content available-menu-items-list" data-type="search"></ul>
 			</div>
 			<div id="new-custom-menu-item" class="accordion-section">
 				<h4 class="accordion-section-title" role="presentation">
@@ -792,7 +792,18 @@
 				</div>
 			</div>
 			<?php
-			// Containers for per-post-type item browsing; items added with JS.
+			/**
+			 * Filter the content types that do not allow new items to be created from nav menus.
+			 *
+			 * Types are formated as 'post_type'|'taxonomy' _ post_type_name; for example, 'taxonomy_post_format'.
+			 *
+			 * @since 4.6.0
+			 *
+			 * @param array  $types  Array of disallowed types.
+			 */
+			$disallowed_new_content_types = apply_filters( 'customize_nav_menus_disallow_new_content_types', array( 'taxonomy_post_format' ) );
+
+			// Containers for per-post-type item browsing; items are added with JS.
 			foreach ( $this->available_item_types() as $available_item_type ) {
 				$id = sprintf( 'available-menu-items-%s-%s', $available_item_type['type'], $available_item_type['object'] );
 				?>
@@ -808,7 +819,26 @@
 							<span class="toggle-indicator" aria-hidden="true"></span>
 						</button>
 					</h4>
-					<ul class="accordion-section-content" data-type="<?php echo esc_attr( $available_item_type['type'] ); ?>" data-object="<?php echo esc_attr( $available_item_type['object'] ); ?>"></ul>
+					<div class="accordion-section-content">
+						<ul class="available-menu-items-list" data-type="<?php echo esc_attr( $available_item_type['type'] ); ?>" data-object="<?php echo esc_attr( $available_item_type['object'] ); ?>"></ul>
+						<?php if ( 'post_type' === $available_item_type['type'] ) {
+							$post_type = get_post_type_object( $available_item_type['object'] );
+							$cap = $post_type->cap->publish_posts;
+							$label = $post_type->labels->singular_name;
+						} else {
+							$taxonomy = get_taxonomy( $available_item_type['object'] );
+							$cap = $taxonomy->cap->manage_terms;
+							$label = $taxonomy->labels->singular_name;
+						}
+						if ( current_user_can( $cap ) && ! in_array( $available_item_type['type'] . '_' . $available_item_type['object'], $disallowed_new_content_types ) ) : ?>
+							<div class="new-content-item">
+								<input type="text" class="create-item-input" placeholder="<?php
+								/* translators: %s: Singular title of post type or taxonomy */
+								printf( __( 'Create New %s' ), $label ); ?>">
+								<button type="button" class="button add-content"><?php _e( 'Add' ); ?></button>
+							</div>
+						<?php endif; ?>
+					</div>
 				</div>
 				<?php
 			}
