Index: src/wp-includes/class-wp-customize-setting.php
===================================================================
--- src/wp-includes/class-wp-customize-setting.php	(revision 37630)
+++ src/wp-includes/class-wp-customize-setting.php	(working copy)
@@ -539,22 +539,23 @@
 	 */
 	public function validate( $value ) {
 		if ( is_wp_error( $value ) ) {
-			return $value;
+			$validity = clone $value;
+		} else {
+			$validity = new WP_Error();
 		}
+
 		if ( is_null( $value ) ) {
-			return new WP_Error( 'invalid_value', __( 'Invalid value.' ) );
+			$validity->add( 'invalid_value', __( 'Invalid value.' ) );
 		}
 
-		$validity = new WP_Error();
-
 		/**
-		 * Validate a Customize setting value.
+		 * Filters the validity of a Customize setting value.
 		 *
 		 * Plugins should amend the `$validity` object via its `WP_Error::add()` method.
 		 *
 		 * @since 4.6.0
 		 *
-		 * @param WP_Error             $validity Filtered from `true` to `WP_Error` when invalid.
+		 * @param WP_Error             $validity Object with errors added, if any.
 		 * @param mixed                $value    Value of the setting.
 		 * @param WP_Customize_Setting $this     WP_Customize_Setting instance.
 		 */
