Index: src/wp-admin/js/customize-nav-menus.js
===================================================================
--- src/wp-admin/js/customize-nav-menus.js	(revision 40921)
+++ src/wp-admin/js/customize-nav-menus.js	(working copy)
@@ -1483,7 +1483,9 @@
 
 			$removeBtn.on( 'click', function() {
 				// Find an adjacent element to add focus to when this menu item goes away
-				var addingItems = true, $adjacentFocusTarget, $next, $prev;
+				var addingItems = true, $adjacentFocusTarget, $next, $prev,
+					currentMenuControl,
+					navMenuItemCount;
 
 				if ( ! $( 'body' ).hasClass( 'adding-menu-items' ) ) {
 					addingItems = false;
@@ -1505,6 +1507,21 @@
 					wp.a11y.speak( api.Menus.data.l10n.itemDeleted );
 					$adjacentFocusTarget.focus(); // keyboard accessibility
 				} );
+
+				currentMenuControl = control.getMenuControl();
+
+				if ( currentMenuControl ) {
+					navMenuItemCount = currentMenuControl.getMenuItemControls().length;
+
+					/**
+					 * Since the item is not remove yet, we check if the
+					 * current value is 1, meaning there is only one item in
+					 * the menu that will be removed.
+					 */
+					if ( 1 === navMenuItemCount ) {
+						currentMenuControl.removeFromWidgets();
+					}
+				}
 			} );
 		},
 
@@ -2135,12 +2152,7 @@
 		 */
 		ready: function() {
 			var control = this,
-				section = api.section( control.section() ),
-				menuId = control.params.menu_id,
-				menu = control.setting(),
-				name,
-				widgetTemplate,
-				select;
+				section = api.section( control.section() );
 
 			if ( 'undefined' === typeof this.params.menu_id ) {
 				throw new Error( 'params.menu_id was not defined' );
@@ -2175,34 +2187,6 @@
 			this._setupAddition();
 			this._setupLocations();
 			this._setupTitle();
-
-			// Add menu to Custom Menu widgets.
-			if ( menu ) {
-				name = displayNavMenuName( menu.name );
-
-				// Add the menu to the existing controls.
-				api.control.each( function( widgetControl ) {
-					if ( ! widgetControl.extended( api.controlConstructor.widget_form ) || 'nav_menu' !== widgetControl.params.widget_id_base ) {
-						return;
-					}
-					widgetControl.container.find( '.nav-menu-widget-form-controls:first' ).show();
-					widgetControl.container.find( '.nav-menu-widget-no-menus-message:first' ).hide();
-
-					select = widgetControl.container.find( 'select' );
-					if ( 0 === select.find( 'option[value=' + String( menuId ) + ']' ).length ) {
-						select.append( new Option( name, menuId ) );
-					}
-				} );
-
-				// Add the menu to the widget template.
-				widgetTemplate = $( '#available-widgets-list .widget-tpl:has( input.id_base[ value=nav_menu ] )' );
-				widgetTemplate.find( '.nav-menu-widget-form-controls:first' ).show();
-				widgetTemplate.find( '.nav-menu-widget-no-menus-message:first' ).hide();
-				select = widgetTemplate.find( '.widget-inside select:first' );
-				if ( 0 === select.find( 'option[value=' + String( menuId ) + ']' ).length ) {
-					select.append( new Option( name, menuId ) );
-				}
-			}
 		},
 
 		/**
@@ -2337,10 +2321,7 @@
 		_handleDeletion: function() {
 			var control = this,
 				section,
-				menuId = control.params.menu_id,
-				removeSection,
-				widgetTemplate,
-				navMenuCount = 0;
+				removeSection;
 			section = api.section( control.section() );
 			removeSection = function() {
 				section.container.remove();
@@ -2359,32 +2340,7 @@
 				removeSection();
 			}
 
-			api.each(function( setting ) {
-				if ( /^nav_menu\[/.test( setting.id ) && false !== setting() ) {
-					navMenuCount += 1;
-				}
-			});
-
-			// Remove the menu from any Custom Menu widgets.
-			api.control.each(function( widgetControl ) {
-				if ( ! widgetControl.extended( api.controlConstructor.widget_form ) || 'nav_menu' !== widgetControl.params.widget_id_base ) {
-					return;
-				}
-				var select = widgetControl.container.find( 'select' );
-				if ( select.val() === String( menuId ) ) {
-					select.prop( 'selectedIndex', 0 ).trigger( 'change' );
-				}
-
-				widgetControl.container.find( '.nav-menu-widget-form-controls:first' ).toggle( 0 !== navMenuCount );
-				widgetControl.container.find( '.nav-menu-widget-no-menus-message:first' ).toggle( 0 === navMenuCount );
-				widgetControl.container.find( 'option[value=' + String( menuId ) + ']' ).remove();
-			});
-
-			// Remove the menu to the nav menu widget template.
-			widgetTemplate = $( '#available-widgets-list .widget-tpl:has( input.id_base[ value=nav_menu ] )' );
-			widgetTemplate.find( '.nav-menu-widget-form-controls:first' ).toggle( 0 !== navMenuCount );
-			widgetTemplate.find( '.nav-menu-widget-no-menus-message:first' ).toggle( 0 === navMenuCount );
-			widgetTemplate.find( 'option[value=' + String( menuId ) + ']' ).remove();
+			control.removeFromWidgets();
 		},
 
 		// Setup theme location checkboxes.
@@ -2621,7 +2577,12 @@
 		 * @returns {wp.customize.Menus.controlConstructor.nav_menu_item} The newly-created nav_menu_item control instance.
 		 */
 		addItemToMenu: function( item ) {
-			var menuControl = this, customizeId, settingArgs, setting, menuItemControl, placeholderId, position = 0, priority = 10;
+			var menuControl = this, customizeId, settingArgs, setting, menuItemControl, placeholderId, position = 0, priority = 10,
+				menu,
+				name,
+				menuId,
+				select,
+				widgetTemplate;
 
 			_.each( menuControl.getMenuItemControls(), function( control ) {
 				if ( false === control.setting() ) {
@@ -2679,7 +2640,93 @@
 
 			wp.a11y.speak( api.Menus.data.l10n.itemAdded );
 
+			/**
+			 * Add menu to Custom Menu widgets since it has at least one
+			 * menu item.
+			 */
+			menu = menuControl.setting();
+
+			if ( menu ) {
+				name 	= displayNavMenuName( menu.name );
+				menuId 	= menuControl.params.menu_id;
+
+				/**
+				 * Add the menu to the existing controls.
+				 */
+				api.control.each( function( widgetControl ) {
+					if ( widgetControl.extended( api.controlConstructor.widget_form ) ||
+						 'nav_menu' === widgetControl.params.widget_id_base ) {
+						widgetControl.container.find( '.nav-menu-widget-form-controls:first' ).show();
+						widgetControl.container.find( '.nav-menu-widget-no-menus-message:first' ).hide();
+
+						select = widgetControl.container.find( 'select' );
+						
+						if ( 0 === select.find( 'option[value=' + String( menuId ) + ']' ).length ) {
+							select.append( new Option( name, menuId ) );
+						}
+					}
+				} );
+				
+				/**
+				 * Add the menu to the widget template.
+				 */
+				widgetTemplate = $( '#available-widgets-list .widget-tpl:has( input.id_base[ value=nav_menu ] )' );
+
+				widgetTemplate.find( '.nav-menu-widget-form-controls:first' ).show();
+				widgetTemplate.find( '.nav-menu-widget-no-menus-message:first' ).hide();
+
+				select = widgetTemplate.find( '.widget-inside select:first' );
+
+				if ( 0 === select.find( 'option[value=' + String( menuId ) + ']' ).length ) {
+					select.append( new Option( name, menuId ) );
+				}
+			}
+
 			return menuItemControl;
+		},
+
+		/**
+		 * Removes menu from widgets.
+		 */
+		removeFromWidgets: function() {
+			var navMenuCount = 0,
+				select,
+				menuId = this.params.menu_id,
+				widgetTemplate;
+
+			api.each( function( setting ) {
+				if ( /^nav_menu\[/.test( setting.id ) &&
+					 false !== setting() ) {
+					navMenuCount += 1;
+				}
+			} );
+
+			/**
+			 * Remove the menu from any Custom Menu widgets.
+			 */
+			api.control.each( function( widgetControl ) {
+				if ( widgetControl.extended( api.controlConstructor.widget_form ) &&
+					'nav_menu' === widgetControl.params.widget_id_base ) {
+					select = widgetControl.container.find( 'select' );
+
+					if ( select.val() === String( menuId ) ) {
+						select.prop( 'selectedIndex', 0 ).trigger( 'change' );
+					}
+
+					widgetControl.container.find( '.nav-menu-widget-form-controls:first' ).toggle( 0 !== navMenuCount );
+					widgetControl.container.find( '.nav-menu-widget-no-menus-message:first' ).toggle( 0 === navMenuCount );
+					widgetControl.container.find( 'option[value=' + String( menuId ) + ']' ).remove();
+				}
+			} );
+
+			/**
+			 * Remove the menu to the nav menu widget template.
+			 */
+			widgetTemplate = $( '#available-widgets-list .widget-tpl:has( input.id_base[ value=nav_menu ] )' );
+
+			widgetTemplate.find( '.nav-menu-widget-form-controls:first' ).toggle( 0 !== navMenuCount );
+			widgetTemplate.find( '.nav-menu-widget-no-menus-message:first' ).toggle( 0 === navMenuCount );
+			widgetTemplate.find( 'option[value=' + String( menuId ) + ']' ).remove();
 		}
 	} );
 
Index: src/wp-includes/widgets/class-wp-nav-menu-widget.php
===================================================================
--- src/wp-includes/widgets/class-wp-nav-menu-widget.php	(revision 40921)
+++ src/wp-includes/widgets/class-wp-nav-menu-widget.php	(working copy)
@@ -118,7 +118,9 @@
 		$nav_menu = isset( $instance['nav_menu'] ) ? $instance['nav_menu'] : '';
 
 		// Get menus
-		$menus = wp_get_nav_menus();
+		$menus = wp_get_nav_menus( array(
+			'hide_empty' => true,
+		) );
 
 		// If no menus exists, direct the user to go and create some.
 		?>
@@ -130,7 +132,7 @@
 				$url = admin_url( 'nav-menus.php' );
 			}
 			?>
-			<?php echo sprintf( __( 'No menus have been created yet. <a href="%s">Create some</a>.' ), esc_attr( $url ) ); ?>
+			<?php echo sprintf( __( 'No menus have been created or they are empty. <a href="%s">Manage menus</a>.' ), esc_attr( $url ) ); ?>
 		</p>
 		<div class="nav-menu-widget-form-controls" <?php if ( empty( $menus ) ) { echo ' style="display:none" '; } ?>>
 			<p>
