diff --git a/core/includes/config.inc b/core/includes/config.inc
index 961c591..28ba9bb 100644
--- a/core/includes/config.inc
+++ b/core/includes/config.inc
@@ -5,6 +5,7 @@ use Drupal\Core\Config\Config;
 use Drupal\Core\Config\FileStorage;
 use Drupal\Core\Config\NullStorage;
 use Drupal\Core\Config\StorageInterface;
+use Drupal\Core\Config\ConfigException;
 use Drupal\Core\Config\FileStorageReadException;
 
 /**
@@ -221,7 +241,7 @@ function _config_meta_element($meta, $data, $base, $index, $group = '') {
       $build += _config_meta_match($element_meta, $value, config_build_name($name, $key), NULL, config_build_name($group, $name));
     }
   }
-  else {
+  elseif (in_array($meta['type'], array_keys(module_invoke_all('config_data_type_info')))) {
     // End element, set data as value.
     if ($group) {
       $meta += array('group' => $group);
@@ -231,6 +251,12 @@ function _config_meta_element($meta, $data, $base, $index, $group = '') {
     }
     $build[$name] = $meta;
   }
+  else {
+    // @todo Use a propely typed exception.
+    // @todo At this point we have "lost" the actual $name of the metadata,
+    //   which would make this exception a bit more usable.
+    throw new ConfigException('Malformed metadata: Data type "' . $meta['type'] . '" does not exist.');
+  }
 
   return $build;
 }
diff --git a/core/modules/config/config.api.php b/core/modules/config/config.api.php
index d83684c..22abbd4 100644
--- a/core/modules/config/config.api.php
+++ b/core/modules/config/config.api.php
@@ -121,3 +121,30 @@ function hook_config_import_delete($name, $new_config, $old_config) {
   return TRUE;
 }
 
+/**
+ * Provide information about configuration data types.
+ *
+ * @return
+ *   An associative array, where the keys are the names of the configuration
+ *   data types and the values are in turn arrays containing the following keys:
+ *   - translatable: (optional) A boolean indicating, whether or not this data
+ *     type inherently contains language-specific data. This mostly (only?)
+ *     applies to data types, which directly contain text. A filepath can point
+ *     to a language-specific file (e.g. a text file), but the path data type is
+ *     not translatable itself. (Right?) Default to FALSE.
+ *   @todo We should probably to at least something like 'label' and
+ *     'description' as well, but I couldn't be bothered to write that.
+ */
+function hook_config_data_type_info() {
+  return array(
+    'boolean' => array(),
+    'date' => array(),
+    'email' => array(),
+    'id' => array(),
+    'machine_name' => array(),
+    'text' => array('translatable' => TRUE),
+    'url' => array(),
+    'weight' => array(),
+  );
+}
+
diff --git a/core/modules/config/config.info b/core/modules/config/config.info
index 380f17e..7c21634 100644
--- a/core/modules/config/config.info
+++ b/core/modules/config/config.info
@@ -3,3 +3,4 @@ description = Allows administrators to manage configuration changes.
 package = Core
 version = VERSION
 core = 8.x
+required = TRUE
diff --git a/core/modules/config/config.module b/core/modules/config/config.module
index b3d9bbc..b28b0f2 100644
--- a/core/modules/config/config.module
+++ b/core/modules/config/config.module
@@ -1 +1,33 @@
 <?php
+
+/**
+ * @file
+ * @todo
+ */
+
+/**
+ * Implements hook_config_data_type_info().
+ */
+function config_config_data_type_info() {
+  return array(
+    'boolean' => array(),
+    'date' => array(),
+    'email' => array(),
+    'id' => array(),
+    'machine_name' => array(),
+    // I have no clue, whether nested_config should be translatable or not. I'm
+    // leaning towards NO, but can't grasp the metadata system enough yet, to be
+    // sure.
+    'nested_config' => array(),
+    'number' => array(),
+    // Shouldn't it be 'filepath'?
+    'path' => array(),
+    // @todo Clarify the difference. Also is 'string' translatable?
+    'string' => array(),
+    'text' => array('translatable' => TRUE),
+    'url' => array(),
+    // This is used internally, but I have no clue what this means.
+    'value' => array(),
+    'weight' => array(),
+  );
+}
