diff --git a/includes/XtoolsBlueprintArray.inc b/includes/XtoolsBlueprintArray.inc
index f639a1f..5f5347e 100644
--- a/includes/XtoolsBlueprintArray.inc
+++ b/includes/XtoolsBlueprintArray.inc
@@ -3,8 +3,17 @@
 class XtoolsBlueprintArray extends XtoolsBlueprintOr {
 
   /**
+   * An array of XtoolsBlueprintChildElement objects that should match certain
+   * array keys. The XtoolsBlueprintChildElement::name properties should match
+   * the keys of the arrays that are to be validated.
+   *
+   * @var array
+   */
+  public $allowed_blueprints_named = array();
+
+  /**
    * Either "string" or "integer", in case the array keys need to be of a
-   * certain type.
+   * certain type, or NULL if the keys can be of either type.
    *
    * @var string
    */
@@ -12,13 +21,29 @@ class XtoolsBlueprintArray extends XtoolsBlueprintOr {
 
   public $type = 'array';
 
-  function __construct(array $allowed_blueprints = array(), $key_type = NULL) {
-    $this->allowed_blueprints = $allowed_blueprints;
+  /**
+   * Constructor.
+   *
+   * @param array $blueprints_named
+   *   An array with XtoolsBlueprintChildElement objects. Keys correspond to
+   *   the keys of the data's array items the blueprints should match
+   *   (sometimes informally known as 'associative' array (items)).
+   * @param array $blueprints_unnamed
+   *   An array with XtoolsBlueprint objects. Every array item of the data
+   *   being validated that should not already match a named blueprint, will be
+   *   validated against all unnamed blueprints.
+   * @param boolean|null $key_type
+   *   Either "string" or "integer" to indicate that array keys should be of
+   *   this type, or NULL so skip key validation.
+   */
+  function __construct(array $blueprints_named = array(), array $blueprints_unnamed = array(), $key_type = NULL) {
+    $this->allowed_blueprints = $blueprints_unnamed;
+    $this->allowed_blueprints_named = $blueprints_named;
     $this->key_type = $key_type;
   }
 
   /**
-   * Implements XtoolsBlueprint::match().
+   * Implements XtoolsBlueprint::validate().
    *
    * @param array $value
    */
@@ -32,9 +57,20 @@ class XtoolsBlueprintArray extends XtoolsBlueprintOr {
         }
       }
 
-      // Validate array elements.
+      // Validate 'associative' array elements.
+      foreach ($this->allowed_blueprints_named as $key => $blueprint) {
+        $element_path = $path . (is_string($key) ? "['$key']" : "[$key]");
+        if ($blueprint->required) {
+          $asserts[] = new XtoolsAssert(isset($value[$key]), "required array element $element_path is set.");
+        }
+        if (isset($value[$key])) {
+          $blueprint->validate($value[$key], $asserts, $element_path);
+        }
+      }
+
+      // Validate 'non-associative' array elements.
       if ($this->allowed_blueprints) {
-        foreach ($value as $key => $element) {
+        foreach (array_diff_key($value, $this->allowed_blueprints_named) as $key => $element) {
           $element_path = $path . (is_string($key) ? "['$key']" : "[$key]");
           parent::validate($element, $asserts, $element_path);
         }
diff --git a/xtools.xtools.inc b/xtools.xtools.inc
index 87585bf..ce568b1 100644
--- a/xtools.xtools.inc
+++ b/xtools.xtools.inc
@@ -10,134 +10,134 @@
  */
 function xtools_xtools_blueprint_info() {
   // hook_aggregator_fetch_info() implementation return value.
-  $blueprints['hook_aggregator_fetch_info'] = new XtoolsBlueprintArray(array(
+  $blueprints['hook_aggregator_fetch_info'] = new XtoolsBlueprintArray(array(), array(
     new XtoolsBlueprintString,
   ), 'integer');
 
   // hook_aggregator_parse_info() implementation return value.
-  $blueprints['hook_aggregator_parse_info'] = new XtoolsBlueprintArray(array(
+  $blueprints['hook_aggregator_parse_info'] = new XtoolsBlueprintArray(array(), array(
     new XtoolsBlueprintString,
   ), 'integer');
 
   // hook_admin_paths() implementation return value.
-  $blueprints['hook_admin_paths'] = new XtoolsBlueprintArray(array(new XtoolsBlueprintBoolean), 'string');
+  $blueprints['hook_admin_paths'] = new XtoolsBlueprintArray(array(), array(new XtoolsBlueprintBoolean), 'string');
 
   // hook_block_info() implementation return value.
-  $blueprints['hook_block_info'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_block_info'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'cache' => new XtoolsBlueprintChildElement(new XtoolsBlueprintInteger),
       'info' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       'pages' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-      'properties' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArrayAssociative(array(
+      'properties' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
         'administrative' => new XtoolsBlueprintChildElement(new XtoolsBlueprintBoolean),
       ))),
       'region' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'status' => new XtoolsBlueprintChildElement(new XtoolsBlueprintInteger),
       'visibility' => new XtoolsBlueprintChildElement(new XtoolsBlueprintInteger),
       'weight' => new XtoolsBlueprintChildElement(new XtoolsBlueprintInteger),
-    ), 'string'),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_cron_queue_info() implementation return value.
-  $blueprints['hook_cron_queue_info'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_cron_queue_info'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'worker callback' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       'time' => new XtoolsBlueprintChildElement(new XtoolsBlueprintInteger),
-    ), 'string'),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_dashboard_regions() implementation return value.
-  $blueprints['hook_dashboard_regions'] = new XtoolsBlueprintArray(array(
+  $blueprints['hook_dashboard_regions'] = new XtoolsBlueprintArray(array(), array(
     new XtoolsBlueprintString
   ), 'string');
 
   // hook_element_info() implementation return value.
-  $blueprints['hook_element_info'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
-      '#after_build' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
+  $blueprints['hook_element_info'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
+      '#after_build' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
         new XtoolsBlueprintString,
       ), 'integer')),
       '#input' => new XtoolsBlueprintChildElement(new XtoolsBlueprintBoolean),
-      '#element_validate' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
+      '#element_validate' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
         new XtoolsBlueprintString,
       ), 'integer')),
-      '#post_render' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
+      '#post_render' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
         new XtoolsBlueprintString,
       ), 'integer')),
-      '#pre_render' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
+      '#pre_render' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
         new XtoolsBlueprintString,
       ), 'integer')),
-      '#process' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
+      '#process' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
         new XtoolsBlueprintString,
       ), 'integer')),
-      '#submit' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
+      '#submit' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
         new XtoolsBlueprintString,
       ), 'integer')),
       '#title_display' => new XtoolsBlueprintChildElement(new XtoolsBlueprintOrValue(array('before', 'after', 'attribute', 'invisible', 'none'))),
-      '#validate' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
+      '#validate' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
         new XtoolsBlueprintString,
       ), 'integer')),
-    ), 'string'),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_entity_info() implementation return value.
-  $blueprints['hook_entity_info'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_entity_info'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'base table' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-      'bundle keys' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArrayAssociative(array(
+      'bundle keys' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
         'bundle' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-      ), 'string')),
-      'bundles' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
-        new XtoolsBlueprintArrayAssociative(array(
-          'admin' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArrayAssociative(array(
-            'access arguments' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), 'integer')),
+      ), array(), 'string')),
+      'bundles' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
+        new XtoolsBlueprintArray(array(
+          'admin' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
+            'access arguments' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(), 'integer')),
             'access callback' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
             'bundle argument' => new XtoolsBlueprintChildElement(new XtoolsBlueprintInteger),
             'path' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
             'real path' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-          ), 'string')),
+          ), array(), 'string')),
           'label' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
           'uri callback' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-        ), 'string'),
+        ), array(), 'string'),
       ), 'string')),
       'controller class' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-      'entity keys' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArrayAssociative(array(
+      'entity keys' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
         'bundle' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
         'id' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
         'label' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
         'revision' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-      ), 'string')),
+      ), array(), 'string')),
       'fieldable' => new XtoolsBlueprintChildElement(new XtoolsBlueprintBoolean),
       'label callback' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'load hook' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'label' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       'revision table' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'static cache' => new XtoolsBlueprintChildElement(new XtoolsBlueprintBoolean),
-      'translation' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), 'string')),
+      'translation' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(), 'string')),
       'uri callback' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-      'view modes' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
-        new XtoolsBlueprintArrayAssociative(array(
+      'view modes' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
+        new XtoolsBlueprintArray(array(
           'label' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
           'custom settings' => new XtoolsBlueprintChildElement(new XtoolsBlueprintBoolean, TRUE),
-        ), TRUE),
+        ), array(), 'string'),
       ), 'string')),
     )),
   ), 'string');
 
   // hook_field_extra_fields() implementation return value.
-  $field_blueprint = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $field_blueprint = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'label' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       'description' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'weight' => new XtoolsBlueprintChildElement(new XtoolsBlueprintInteger),
-    ), 'string'),
+    ), array(), 'string'),
   ), 'string');
   // The entity type.
-  $blueprints['hook_field_extra_fields'] = new XtoolsBlueprintArray(array(
+  $blueprints['hook_field_extra_fields'] = new XtoolsBlueprintArray(array(), array(
     // The bundle.
-    new XtoolsBlueprintArray(array(
+    new XtoolsBlueprintArray(array(), array(
       // "form"/"display".
-      new XtoolsBlueprintArrayAssociative(array(
+      new XtoolsBlueprintArray(array(
         'display' => new XtoolsBlueprintChildElement($field_blueprint),
         'form' => new XtoolsBlueprintChildElement($field_blueprint),
       )),
@@ -145,87 +145,87 @@ function xtools_xtools_blueprint_info() {
   ), 'string');
 
   // hook_field_info() implementation return value.
-  $blueprints['hook_field_info'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_field_info'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'default_formatter' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'default_widget' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'description' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-      'instance_settings' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), 'string')),
+      'instance_settings' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(), 'string')),
       'label' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'no_ui' => new XtoolsBlueprintChildElement(new XtoolsBlueprintBoolean),
-      'settings' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), 'string')),
-    ), 'string'),
+      'settings' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(), 'string')),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_field_formatter_info() implementation return value.
-  $blueprints['hook_field_formatter_info'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_field_formatter_info'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'description' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-      'field types' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), 'integer')),
+      'field types' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(), 'integer')),
       'label' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-      'settings' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), 'string')),
-    ), 'string'),
+      'settings' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(), 'string')),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_field_storage_info() implementation return value.
-  $blueprints['hook_field_storage_info'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_field_storage_info'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'description' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'label' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-      'settings' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), 'string')),
-    ), 'string'),
+      'settings' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(), 'string')),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_field_widget_info() implementation return value.
-  $blueprints['hook_field_widget_info'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
-      'behaviors' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_field_widget_info'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
+      'behaviors' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
         'default value' => new XtoolsBlueprintChildElement(new XtoolsBlueprintOrValue(array(FIELD_BEHAVIOR_DEFAULT, FIELD_BEHAVIOR_NONE))),
         'multiple values' => new XtoolsBlueprintChildElement(new XtoolsBlueprintOrValue(array(FIELD_BEHAVIOR_CUSTOM, FIELD_BEHAVIOR_DEFAULT))),
-      ), 'string')),
+      ), array(), 'string')),
       'description' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-      'field types' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), 'integer')),
+      'field types' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(), 'integer')),
       'label' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-      'settings' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), 'string')),
-    ), 'string'),
+      'settings' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(), 'string')),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_forms() implementation return value.
-  $blueprints['hook_forms'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_forms'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'callback' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
-      'callback arguments' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), 'integer')),
+      'callback arguments' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(), 'integer')),
       'wrapper callback' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-    ), 'string'),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_flush_caches() implementation return value.
-  $blueprints['hook_flush_caches'] = new XtoolsBlueprintArray(array(
+  $blueprints['hook_flush_caches'] = new XtoolsBlueprintArray(array(), array(
     new XtoolsBlueprintString,
   ), 'integer');
 
   // hook_hook_info() implementation return value.
-  $blueprints['hook_hook_info'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_hook_info'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'group' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
-    ), 'string'),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_image_toolkits() implementation return value.
-  $blueprints['hook_image_toolkits'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_image_toolkits'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'title' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       'available' => new XtoolsBlueprintChildElement(new XtoolsBlueprintBoolean, TRUE),
-    ), 'string'),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_library() implementation return value.
-  $blueprints['hook_library'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
-      'css' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
-        new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_library'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
+      'css' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
+        new XtoolsBlueprintArray(array(
           'basename' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-          'browsers' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
+          'browsers' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
             new XtoolsBlueprintBoolean,
             new XtoolsBlueprintString,
           ), 'string')),
@@ -234,11 +234,11 @@ function xtools_xtools_blueprint_info() {
           'media' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
           'type' => new XtoolsBlueprintChildElement(new XtoolsBlueprintOrValue(array('file', 'inline', 'external'))),
           'weight' => new XtoolsBlueprintChildElement(new XtoolsBlueprintInteger),
-        ), 'string'),
+        ), array(), 'string'),
       ), 'string')),
-      'js' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
+      'js' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
         new XtoolsBlueprintString,
-        new XtoolsBlueprintArrayAssociative(array(
+        new XtoolsBlueprintArray(array(
           'cache' => new XtoolsBlueprintChildElement(new XtoolsBlueprintBoolean),
           'defer' => new XtoolsBlueprintChildElement(new XtoolsBlueprintBoolean),
           'every_page' => new XtoolsBlueprintChildElement(new XtoolsBlueprintBoolean),
@@ -247,22 +247,22 @@ function xtools_xtools_blueprint_info() {
           'scope' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
           'type' => new XtoolsBlueprintChildElement(new XtoolsBlueprintOrValue(array('file', 'inline', 'external', 'setting'))),
           'weight' => new XtoolsBlueprintChildElement(new XtoolsBlueprintInteger),
-        ), 'string'),
+        ), array(), 'string'),
       ))),
-      'dependencies' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
-        new XtoolsBlueprintArray(array(
+      'dependencies' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
+        new XtoolsBlueprintArray(array(), array(
           new XtoolsBlueprintString,
         ), 'integer'),
       ), 'integer')),
       'title' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'version' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'website' => new XtoolsBlueprintChildElement(new XtoolsBlueprintURL),
-    ), 'string'),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_menu() implementation return value.
-  $blueprints['hook_menu'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_menu'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'access arguments' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray),
       'access callback' => new XtoolsBlueprintChildElement(new XtoolsBlueprintOr(array(
         new XtoolsBlueprintBoolean,
@@ -274,11 +274,11 @@ function xtools_xtools_blueprint_info() {
       'file path' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'load arguments' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray),
       'menu_name' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-      'options' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArrayAssociative(array(
-        'attributes' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), 'string')),
+      'options' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
+        'attributes' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(), 'string')),
         'html' => new XtoolsBlueprintChildElement(new XtoolsBlueprintBoolean),
         'language' => new XtoolsBlueprintChildElement(new XtoolsBlueprintObject),
-      ), 'string')),
+      ), array(), 'string')),
       'page arguments' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray),
       'page callback' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'position' => new XtoolsBlueprintChildElement(new XtoolsBlueprintOrValue(array('left', 'right'))),
@@ -290,12 +290,12 @@ function xtools_xtools_blueprint_info() {
       'title arguments' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray),
       'title callback' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'weight' => new XtoolsBlueprintChildElement(new XtoolsBlueprintInteger),
-    ), 'string'),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_node_info() implementation return value.
-  $blueprints['hook_node_info'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_node_info'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'base' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       'description' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       'has_title' => new XtoolsBlueprintChildElement(new XtoolsBlueprintBoolean),
@@ -303,61 +303,61 @@ function xtools_xtools_blueprint_info() {
       'locked' => new XtoolsBlueprintChildElement(new XtoolsBlueprintBoolean),
       'name' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       'title_label' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-    ), 'string'),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_node_operations() implementation return value.
-  $blueprints['hook_node_operations'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_node_operations'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'label' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       'callback' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       'callback arguments' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray),
-    ), 'string'),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_ranking() implementation return value.
-  $blueprints['hook_ranking'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_ranking'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'arguments' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray),
       'join' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'score' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       'title' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
-    ), 'string'),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_permission() implementation return value.
-  $blueprints['hook_permission'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_permission'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'description' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'restrict access' => new XtoolsBlueprintChildElement(new XtoolsBlueprintBoolean),
       'title' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       'warning' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-    ), 'string'),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_requirements() return value.
-  $blueprints['hook_requirements'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_requirements'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'description' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'severity' => new XtoolsBlueprintChildElement(new XtoolsBlueprintInteger),
       'title' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'value' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-    ), 'string'),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_schema() implementation return value.
-  $key_column_specifiers = new XtoolsBlueprintArray(array(
+  $key_column_specifiers = new XtoolsBlueprintArray(array(), array(
     new XtoolsBlueprintString,
-    new XtoolsBlueprintArrayAssociative(array(
+    new XtoolsBlueprintArray(array(
       0 => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       1 => new XtoolsBlueprintChildElement(new XtoolsBlueprintInteger),
-    ), 'integer'),
+    ), array(), 'integer'),
   ), 'integer');
-  $blueprints['hook_schema'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_schema'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'description' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-      'fields' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
-        new XtoolsBlueprintArrayAssociative(array(
+      'fields' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
+        new XtoolsBlueprintArray(array(
           'description' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
           'length' => new XtoolsBlueprintChildElement(new XtoolsBlueprintInteger),
           'not null' => new XtoolsBlueprintChildElement(new XtoolsBlueprintBoolean),
@@ -367,42 +367,42 @@ function xtools_xtools_blueprint_info() {
           'size' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
           'type' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
           'unsigned' => new XtoolsBlueprintChildElement(new XtoolsBlueprintBoolean),
-        ), 'string'),
+        ), array(), 'string'),
       ), 'string'), TRUE),
-      'foreign keys' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
-        new XtoolsBlueprintArrayAssociative(array(
+      'foreign keys' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
+        new XtoolsBlueprintArray(array(
           'table' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
-          'columns' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
+          'columns' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
             new XtoolsBlueprintString,
           ), 'string'), TRUE),
-        ), 'string'),
+        ), array(), 'string'),
       ), 'string')),
-      'indexes' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array($key_column_specifiers), 'string')),
+      'indexes' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array($key_column_specifiers), 'string')),
       'mysql_suffix' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'primary key' => new XtoolsBlueprintChildElement($key_column_specifiers),
-      'unique keys' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array($key_column_specifiers), 'string')),
-    ), 'string'),
+      'unique keys' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array($key_column_specifiers), 'string')),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_stream_wrappers() return value.
-  $blueprints['hook_stream_wrappers'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_stream_wrappers'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
       'class' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       'description' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       'name' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       'type' => new XtoolsBlueprintChildElement(new XtoolsBlueprintInteger),
-    ), 'string'),
+    ), array(), 'string'),
   ), 'string');
 
   // hook_system_theme_info() return value.
-  $blueprints['hook_system_theme_info'] = new XtoolsBlueprintArray(array(
+  $blueprints['hook_system_theme_info'] = new XtoolsBlueprintArray(array(), array(
     new XtoolsBlueprintString,
   ), 'string');
 
   // hook_update_dependencies() return value.
-  $blueprints['hook_update_dependencies'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArray(array(
-      new XtoolsBlueprintArray(array(
+  $blueprints['hook_update_dependencies'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(), array(
+      new XtoolsBlueprintArray(array(), array(
         new XtoolsBlueprintInteger,
       ), 'string'),
     ), 'integer'),
@@ -412,43 +412,43 @@ function xtools_xtools_blueprint_info() {
   $blueprints['hook_update_last_removed'] = new XtoolsBlueprintInteger;
 
   // hook_user_categories() return value.
-  $blueprints['hook_user_categories'] = new XtoolsBlueprintArray(array(
-    new XtoolsBlueprintArrayAssociative(array(
-      'access arguments' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), 'integer')),
+  $blueprints['hook_user_categories'] = new XtoolsBlueprintArray(array(), array(
+    new XtoolsBlueprintArray(array(
+      'access arguments' => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(), 'integer')),
       'access callback' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'name' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'title' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
       'weight' => new XtoolsBlueprintChildElement(new XtoolsBlueprintInteger),
-    ), 'string'),
+    ), array(), 'string'),
   ), 'integer');
 
   // hook_views_api() return value.
-  $blueprints['hook_views_api'] = new XtoolsBlueprintArrayAssociative(array(
+  $blueprints['hook_views_api'] = new XtoolsBlueprintArray(array(
     'api' => new XtoolsBlueprintChildElement(new XtoolsBlueprintInteger),
     'path' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
     'template path' => new XtoolsBlueprintChildElement(new XtoolsBlueprintString),
-  ), 'string');
+  ), array(), 'string');
 
   // hook_xmlrpc() return value.
-  $blueprints['hook_xmlrpc'] = new XtoolsBlueprintArray(array(
+  $blueprints['hook_xmlrpc'] = new XtoolsBlueprintArray(array(), array(
     new XtoolsBlueprintString,
-    new XtoolsBlueprintArrayAssociative(array(
+    new XtoolsBlueprintArray(array(
       0 => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
       1 => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
-      2 => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(
+      2 => new XtoolsBlueprintChildElement(new XtoolsBlueprintArray(array(), array(
         new XtoolsBlueprintOrValue(array('array', 'base64', 'boolean', 'date', 'double', 'int', 'string', 'struct')),
       )), TRUE),
       3 => new XtoolsBlueprintChildElement(new XtoolsBlueprintString, TRUE),
-    ), 'integer'),
+    ), array(), 'integer'),
   ));
 
   // hook_xtools_callable_type_info() return value.
-  $blueprints['hook_xtools_callable_type_info'] = new XtoolsBlueprintArray(array(
+  $blueprints['hook_xtools_callable_type_info'] = new XtoolsBlueprintArray(array(), array(
     new XtoolsBlueprintInfo('XtoolsCallableType'),
   ), 'integer');
 
   // hook_xtools_blueprint_info() return value.
-  $blueprints['hook_xtools_blueprint_info'] = new XtoolsBlueprintArray(array(
+  $blueprints['hook_xtools_blueprint_info'] = new XtoolsBlueprintArray(array(), array(
     new XtoolsBlueprintObject('XtoolsBlueprint'),
   ), 'string');
 
@@ -460,7 +460,7 @@ function xtools_xtools_blueprint_info() {
   ), 'integer');
 
   // hook_xtools_signature_info() return value.
-  $blueprints['hook_xtools_signature_info'] = new XtoolsBlueprintArray(array(
+  $blueprints['hook_xtools_signature_info'] = new XtoolsBlueprintArray(array(), array(
     new XtoolsBlueprintObject('XtoolsSignature'),
   ), 'string');
 
