docs: function(name, schema, options) {
      options = options || {};
      var f = options.global && options.global.formDefaults ?
              angular.copy(options.global.formDefaults) : {};
      if (options.global && options.global.supressPropertyTitles === true) {
        f.title = schema.title;
      } else {
        f.title = schema.title || name;
      }
  
      if (schema.description) { f.description = schema.description; }
      if (options.required === true || schema.required === true) { f.required = true; }
      if (schema.maxLength) { f.maxlength = schema.maxLength; }
      if (schema.minLength) { f.minlength = schema.minLength; }
      if (schema.readOnly || schema.readonly) { f.readonly  = true; }
      if (schema.minimum) { f.minimum = schema.minimum + (schema.exclusiveMinimum ? 1 : 0); }
      if (schema.maximum) { f.maximum = schema.maximum - (schema.exclusiveMaximum ? 1 : 0); }
  
      // Non standard attributes (DONT USE DEPRECATED)
      // If you must set stuff like this in the schema use the x-schema-form attribute
      if (schema.validationMessage) { f.validationMessage = schema.validationMessage; }
      if (schema.enumNames) { f.titleMap = canonicalTitleMap(schema.enumNames, schema['enum']); }
      f.schema = schema;
  
      // Ng model options doesn't play nice with undefined, might be defined
      // globally though
      f.ngModelOptions = f.ngModelOptions || {};
  
      return f;
    }