diff --git src/wp-includes/customize/class-wp-customize-partial.php src/wp-includes/customize/class-wp-customize-partial.php
index 458fa1a..759df59 100644
--- src/wp-includes/customize/class-wp-customize-partial.php
+++ src/wp-includes/customize/class-wp-customize-partial.php
@@ -176,7 +176,11 @@ class WP_Customize_Partial {
 		}
 
 		if ( empty( $this->primary_setting ) ) {
-			$this->primary_setting = current( $this->settings );
+			if ( isset( $this->settings['default'] ) ) {
+				$this->primary_setting = $this->settings['default'];
+			} else {
+				$this->primary_setting = current( $this->settings );
+			}
 		}
 	}
 
diff --git src/wp-includes/js/customize-selective-refresh.js src/wp-includes/js/customize-selective-refresh.js
index 5cf0799..9ad49d4 100644
--- src/wp-includes/js/customize-selective-refresh.js
+++ src/wp-includes/js/customize-selective-refresh.js
@@ -30,14 +30,13 @@ wp.customize.selectiveRefresh = ( function( $, api ) {
 	 * @augments wp.customize.Class
 	 * @since 4.5.0
 	 *
-	 * @param {string} id                              Unique identifier for the control instance.
-	 * @param {object} options                         Options hash for the control instance.
-	 * @param {object} options.params
-	 * @param {string} options.params.type             Type of partial (e.g. nav_menu, widget, etc)
-	 * @param {string} options.params.selector         jQuery selector to find the container element in the page.
-	 * @param {array}  options.params.settings         The IDs for the settings the partial relates to.
-	 * @param {string} options.params.primarySetting   The ID for the primary setting the partial renders.
-	 * @param {bool}   options.params.fallbackRefresh  Whether to refresh the entire preview in case of a partial refresh failure.
+	 * @param {string}       id                              Unique identifier for the control instance.
+	 * @param {object}       options                         Options hash for the control instance.
+	 * @param {object}       options.params
+	 * @param {string}       options.params.type             Type of partial (e.g. nav_menu, widget, etc)
+	 * @param {string}       options.params.selector         jQuery selector to find the container element in the page.
+	 * @param {object|array} options.params.settings         The IDs for the settings the partial relates to, either an array of IDs or an object mapping to setting values.
+	 * @param {bool}         options.params.fallbackRefresh  Whether to refresh the entire preview in case of a partial refresh failure.
 	 */
 	Partial = self.Partial = api.Class.extend({
 
@@ -60,7 +59,7 @@ wp.customize.selectiveRefresh = ( function( $, api ) {
 			partial.params = _.extend(
 				{
 					selector: null,
-					settings: [],
+					settings: {},
 					primarySetting: null,
 					containerInclusive: false,
 					fallbackRefresh: true // Note this needs to be false in a front-end editing context.
@@ -140,10 +139,10 @@ wp.customize.selectiveRefresh = ( function( $, api ) {
 		 */
 		settings: function() {
 			var partial = this;
-			if ( partial.params.settings && 0 !== partial.params.settings.length ) {
+			if ( _.isArray( partial.params.settings ) && 0 !== partial.params.settings.length ) {
 				return partial.params.settings;
-			} else if ( partial.params.primarySetting ) {
-				return [ partial.params.primarySetting ];
+			} else if ( _.isObject( partial.params.settings ) ) {
+				return _.values( partial.params.settings );
 			} else {
 				return [ partial.id ];
 			}
@@ -176,8 +175,12 @@ wp.customize.selectiveRefresh = ( function( $, api ) {
 		 * @since 4.5.0
 		 */
 		showControl: function() {
-			var partial = this, settingId = partial.params.primarySetting;
-			if ( ! settingId ) {
+			var partial = this, settingId;
+			if ( partial.params.primarySetting ) {
+				settingId = partial.params.primarySetting;
+			} else if ( _.isObject( partial.params.settings ) && partial.params.settings['default'] ) {
+				settingId = partial.params.settings['default'];
+			} else {
 				settingId = _.first( partial.settings() );
 			}
 			api.preview.send( 'focus-control-for-setting', settingId );
