docs: function Model(json, metadata, parent) {
          var jsonModel = json || {},
              modelMetadata = metadata || {},
              modelName = modelMetadata.name !== undefined? modelMetadata.name : "root",
              modelParent = parent || null;
  
          if (modelMetadata.name) { // name is not part of the metadata.
              delete modelMetadata.name;
          }
  
          //A Model is in itself a Property so lets call our supers constructor
          Property.call(this, modelName, jsonModel, modelParent, modelMetadata);
  
          if (this.validateValue(jsonModel)) {
  
              for (var name in jsonModel) {
                  if (name.match(Model.PROPERTY_METADATA_SERIALIZED_NAME_REGEX)) { // skip special meta data properties
                      continue;
                  }
  
                  var value = jsonModel[name];
                  var propertyMetadata = jsonModel[name + Model.PROPERTY_METADATA_SERIALIZED_NAME_SUFFIX];
  
                  if (!modelMetadata.thin) {
                      this.createProperty(name, value, propertyMetadata);
                  }
              }
          }
      }