code: function (value, node) {
          var i, el;
          var valid = (typeof value === "object");
          var fields = {};
          if (valid) {
              /*  pass 1: ensure that all mandatory fields exist
                  and determine map of valid fields for pass 2  */
              for (i = 0; i < node.elements.length; i++) {
                  el = node.elements[i];
                  fields[el.key] = el.element;
                  if (   el.arity[0] > 0
                      && (   (el.key === "@" && _cs.keysof(value).length === 0)
                          || (el.key !== "@" && typeof value[el.key] === "undefined"))) {
                      valid = false;
                      break;
                  }
              }
          }
          if (valid) {
              /*  pass 2: ensure that no unknown fields exist
                  and that all existing fields are valid  */
              for (var field in value) {
                  if (   !Object.hasOwnProperty.call(value, field)
                      || !Object.propertyIsEnumerable.call(value, field)
                      || field === "constructor"
                      || field === "prototype"                          )
                      continue;
                  if (   typeof fields[field] !== "undefined"
                      && this.exec_spec(value[field], fields[field])) /*  RECURSION  */
                      continue;
                  if (   typeof fields["@"] !== "undefined"
                      && this.exec_spec(value[field], fields["@"]))   /*  RECURSION  */
                      continue;
                  valid = false;
                  break;
              }
          }
          return valid;
      }
docs: /*  validate hash type