Index: src/wp-includes/meta.php
===================================================================
--- src/wp-includes/meta.php	(revision 43042)
+++ src/wp-includes/meta.php	(working copy)
@@ -529,11 +529,7 @@
 		}
 	}
 
-	if ( $single ) {
-		return '';
-	} else {
-		return array();
-	}
+	return get_metadata_default( $meta_type, $meta_key, $single );
 }
 
 /**
@@ -1033,6 +1029,7 @@
 		'sanitize_callback' => null,
 		'auth_callback'     => null,
 		'show_in_rest'      => false,
+		'default_value'     => false,
 	);
 
 	// There used to be individual args for sanitize and auth callbacks
@@ -1096,6 +1093,48 @@
 }
 
 /**
+ * @param $meta_type
+ * @param $meta_key
+ * @param bool $single
+ *
+ * @return array|bool
+ */
+function get_metadata_default( $meta_type, $meta_key, $single = false ) {
+	global $wp_meta_keys;
+
+	if ( ! is_array( $wp_meta_keys ) ) {
+		$wp_meta_keys = array();
+	}
+
+	if ( $single ) {
+		$default_value = '';
+	} else {
+		$default_value =  array();
+	}
+
+	if ( isset( $wp_meta_keys[ $meta_type ][ $meta_key ]['default_value'] ) && false !== $wp_meta_keys[ $meta_type ][ $meta_key ]['default_value'] ) {
+		$default_value = $wp_meta_keys[ $meta_type ][ $meta_key ]['default_value'];
+	}
+
+	/**
+	 *
+	 * @since 5.0.0
+	 *
+	 * @param null|array|string $default_value     The default value of get_metadata() should return - a single metadata value,
+	 *                                     or an array of values.
+	 * @param string            $meta_key  Meta key.
+	 * @param bool              $single    Whether to return only the first value of the specified $meta_key.
+	 */
+	$default_value = apply_filters( "get_{$meta_type}_metadata_default", $default_value, $meta_key, $single );
+
+	if ( ! $single ) {
+		$default_value = (array) $default_value;
+	}
+
+	return $default_value;
+}
+
+/**
  * Checks if a meta key is registered.
  *
  * @since 4.6.0
