Index: src/wp-admin/js/customize-controls.js
===================================================================
--- src/wp-admin/js/customize-controls.js	(revision 37402)
+++ src/wp-admin/js/customize-controls.js	(working copy)
@@ -1604,6 +1604,25 @@
 		focus: focus,
 
 		/**
+		 * Focus (expand) another construct and return to this control when it is collapsed.
+		 *
+		 * @param {wp.customize.Section|wp.customize.Panel} construct - The object to expand.
+		 * @this {wp.customize.Control}
+		 */
+		focusConstructAndReturnToControlWhenCollapsed: function( construct ) {
+			var control = this;
+
+			construct.focus();
+			function onceCollapsed( isExpanded ) {
+				if ( ! isExpanded ) {
+					construct.expanded.unbind( onceCollapsed );
+					control.focus();
+				}
+			}
+			construct.expanded.bind( onceCollapsed );
+		},
+
+		/**
 		 * Update UI in response to a change in the control's active state.
 		 * This does not change the active state, it merely handles the behavior
 		 * for when it does change.
Index: src/wp-admin/js/customize-widgets.js
===================================================================
--- src/wp-admin/js/customize-widgets.js	(revision 37402)
+++ src/wp-admin/js/customize-widgets.js	(working copy)
@@ -514,7 +514,7 @@
 			 * Trigger widget-added event so that plugins can attach any event
 			 * listeners and dynamic UI elements.
 			 */
-			$( document ).trigger( 'widget-added', [ control.container.find( '.widget:first' ) ] );
+			$( document ).trigger( 'widget-added', [ control.container.find( '.widget:first' ), control ] );
 
 		},
 
@@ -2139,6 +2139,27 @@
 		return foundControl;
 	};
 
+	/* 
+	 * Init linking between menu widgets and customizer menus.
+	 */
+	$( document ).on( 'widget-added', function( event, widgetContainer, widgetControl ) {
+		if ( 0 < widgetContainer.find( '.nav-menu-widget-form-controls' ).length ) {
+			var menuField = widgetContainer.find( '.selected-menu' ),
+			    button = widgetContainer.find( '.edit-menu' );
+			menuField.on( 'change', function() {
+				if ( 0 < menuField.val() ) {
+					button.show();
+				} else {
+					button.hide();
+				}
+			});
+			button.on( 'click', function() {
+				var section = wp.customize.section( 'nav_menu[' + menuField.val() + ']' );
+				widgetControl.focusConstructAndReturnToControlWhenCollapsed( section );
+			} );
+		}
+	} );
+
 	/**
 	 * @param {String} widgetId
 	 * @returns {Object}
Index: src/wp-includes/widgets/class-wp-nav-menu-widget.php
===================================================================
--- src/wp-includes/widgets/class-wp-nav-menu-widget.php	(revision 37402)
+++ src/wp-includes/widgets/class-wp-nav-menu-widget.php	(working copy)
@@ -137,7 +137,7 @@
 			</p>
 			<p>
 				<label for="<?php echo $this->get_field_id( 'nav_menu' ); ?>"><?php _e( 'Select Menu:' ); ?></label>
-				<select id="<?php echo $this->get_field_id( 'nav_menu' ); ?>" name="<?php echo $this->get_field_name( 'nav_menu' ); ?>">
+				<select class="selected-menu" id="<?php echo $this->get_field_id( 'nav_menu' ); ?>" name="<?php echo $this->get_field_name( 'nav_menu' ); ?>">
 					<option value="0"><?php _e( '&mdash; Select &mdash;' ); ?></option>
 					<?php foreach ( $menus as $menu ) : ?>
 						<option value="<?php echo esc_attr( $menu->term_id ); ?>" <?php selected( $nav_menu, $menu->term_id ); ?>>
@@ -145,6 +145,9 @@
 						</option>
 					<?php endforeach; ?>
 				</select>
+				<?php if ( isset( $GLOBALS['wp_customize'] ) && $GLOBALS['wp_customize'] instanceof WP_Customize_Manager ) : ?>
+					<button type="button" class="button edit-menu" style="margin-top: 12px; <?php if ( ! $nav_menu ) { echo 'display: none;'; } ?>"><?php _e( 'Edit Menu' ) ?></button>
+				<?php endif; ?>
 			</p>
 		</div>
 		<?php
