Index: src/wp-includes/nav-menu.php
===================================================================
--- src/wp-includes/nav-menu.php	(revision 33119)
+++ src/wp-includes/nav-menu.php	(working copy)
@@ -350,22 +350,44 @@
 		return $menu;
 	}
 
-	$defaults = array(
-		'menu-item-db-id' => $menu_item_db_id,
-		'menu-item-object-id' => 0,
-		'menu-item-object' => '',
-		'menu-item-parent-id' => 0,
-		'menu-item-position' => 0,
-		'menu-item-type' => 'custom',
-		'menu-item-title' => '',
-		'menu-item-url' => '',
-		'menu-item-description' => '',
-		'menu-item-attr-title' => '',
-		'menu-item-target' => '',
-		'menu-item-classes' => '',
-		'menu-item-xfn' => '',
-		'menu-item-status' => '',
-	);
+	if ( 0 !== $menu_item_db_id ) {
+		// Existing item; only changed properties will be updated.
+		$item = get_post( $menu_item_db_id );
+		$item = wp_setup_nav_menu_item( $item );
+		$defaults = array(
+			'menu-item-db-id'       => $menu_item_db_id,
+			'menu-item-object-id'   => $item->object_id,
+			'menu-item-object'      => $item->object,
+			'menu-item-parent-id'   => $item->menu_item_parent,
+			'menu-item-position'    => $item->menu_order,
+			'menu-item-type'        => $item->type,
+			'menu-item-title'       => $item->title,
+			'menu-item-url'         => $item->url,
+			'menu-item-description' => $item->description,
+			'menu-item-attr-title'  => $item->attr_title,
+			'menu-item-target'      => $item->target,
+			'menu-item-classes'     => implode( ' ', $item->classes ),
+			'menu-item-xfn'         => $item->xfn,
+			'menu-item-status'      => $item->post_status,
+		);
+	} else {
+		$defaults = array(
+			'menu-item-db-id'       => $menu_item_db_id,
+			'menu-item-object-id'   => 0,
+			'menu-item-object'      => '',
+			'menu-item-parent-id'   => 0,
+			'menu-item-position'    => 0,
+			'menu-item-type'        => 'custom',
+			'menu-item-title'       => '',
+			'menu-item-url'         => '',
+			'menu-item-description' => '',
+			'menu-item-attr-title'  => '',
+			'menu-item-target'      => '',
+			'menu-item-classes'     => '',
+			'menu-item-xfn'         => '',
+			'menu-item-status'      => '',
+		);
+	}
 
 	$args = wp_parse_args( $menu_item_data, $defaults );
 
Index: tests/phpunit/tests/customize/nav-menu-item-setting.php
===================================================================
--- tests/phpunit/tests/customize/nav-menu-item-setting.php	(revision 33119)
+++ tests/phpunit/tests/customize/nav-menu-item-setting.php	(working copy)
@@ -622,4 +622,61 @@
 		$this->assertEquals( 'deleted', $update_result['status'] );
 	}
 
+	/**
+	 * Make sure an existing menu item is pre-populated with its existing values.
+	 *
+	 * @ticket 28138
+	 */
+	function test_default_values() {
+		do_action( 'customize_register', $this->wp_customize );
+
+		$first_post_id = $this->factory->post->create( array( 'post_title' => 'Hello World' ) );
+
+		$primary_menu_id = wp_create_nav_menu( 'Primary' );
+		$item_title = 'Greetings';
+		$item_id = wp_update_nav_menu_item( $primary_menu_id, 0, array(
+			'menu-item-type'        => 'post_type',
+			'menu-item-object'      => 'post',
+			'menu-item-object-id'   => $first_post_id,
+			'menu-item-title'       => $item_title,
+			'menu-item-status'      => 'publish',
+			'menu-item-parent-id'   => 1,
+			'menu-item-position'    => 1,
+			'menu-item-description' => 'This is a test',
+			'menu-item-attr-title'  => 'Attribute title',
+			'menu-item-target'      => '_blank',
+			'menu-item-classes'     => 'first second',
+			'menu-item-xfn'         => 'xfn',
+		) );
+
+		// Hook a mock action into the update action so we can capture arguments
+		$a = new MockAction();
+		add_action( 'wp_update_nav_menu_item', array( $a, 'action' ), 10, 3 );
+
+		// Now update the menu, passing no information, and verify that everything stayed the same
+		$updated_id = wp_update_nav_menu_item( $primary_menu_id, $item_id, array() );
+
+		// Verify
+		$this->assertEquals( 1, $a->get_call_count() );
+
+		$args = $a->get_args();
+		$args = $args[0]; // There is only one item in the collection
+		$this->assertEquals( $primary_menu_id, $args[0] );
+		$this->assertEquals( $item_id, $args[1] );
+
+		$this->assertEquals( 'post_type',       $args[2]['menu-item-type'] );
+		$this->assertEquals( 'post',            $args[2]['menu-item-object'] );
+		$this->assertEquals( $first_post_id,    $args[2]['menu-item-object-id'] );
+		$this->assertEquals( $item_title,       $args[2]['menu-item-title'] );
+		$this->assertEquals( 'publish',         $args[2]['menu-item-status'] );
+		$this->assertEquals( 1,                 $args[2]['menu-item-parent-id'] );
+		$this->assertEquals( 1,                 $args[2]['menu-item-position'] );
+		$this->assertEquals( 'This is a test',  $args[2]['menu-item-description'] );
+		$this->assertEquals( 'Attribute title', $args[2]['menu-item-attr-title'] );
+		$this->assertEquals( '_blank',          $args[2]['menu-item-target'] );
+		$this->assertEquals( 'xfn',             $args[2]['menu-item-xfn'] );
+
+		$this->assertContains( 'first',  $args[2]['menu-item-classes'] );
+		$this->assertContains( 'second', $args[2]['menu-item-classes'] );
+	}
 }
