docs: function initField (form, args) {
      // field specification to return
      var field = {}
      // get model
      var model = form.model
      // set default based on schema data
      if (form.model.schemaData) {
          // get data properites from schema
          var properties = form.model.schemaData.properties
          // create lookup table of required properties
          var required = _.zipObject(form.model.schemaData.required, _.map(form.model.schemaData.required, () => true))
      }
      else {
          var properties = {}
          var required = {}
      }
      // string is passed then use as property name
      if (typeof args === 'string') {
          field.property = args
          // set args as empty object so that it can be checked for values
          args = {}
      }
      else {
          // require field to be object
          assert.ok(args && typeof args === 'object', 'field must be object')
          // field can be a section divider
          if (args.legend) {
              return args
          }
          else {
              // require field to have property
              assert.ok(typeof args.property === 'string' && args.property.length, 'field must have property')
              // set property from args
              field.property = args.property
          }
      }
      // if property is required make field required
      if (required[field.property]) {
          field.required = true
      }
      // set path base on property name
      field.path = changeCase.paramCase(field.property)
      // get property schema for field
      var schema = properties[field.property]
      // build field data from args and schema
      return buildField(args, field, form, model, schema)
  }