docs: function normalizeInput (data, field) {
      // replace empty strings with undefined
      if ((field.inputType === 'text' || field.inputType === 'select') && data[field.property] === '') {
          data[field.property] = undefined
      }
      // convert checkbox value to boolean
      else if (field.inputType === 'checkbox') {
          data[field.property] = data[field.property] ? true : false
      }
      // nested array input
      else if (field.nested && field.array) {
          // if input has property then remove last row if it is all empty
          if (Array.isArray(data[field.property])) {
              // get last row in array
              var item = data[field.property][data[field.property].length - 1]
              // flag set to true if any values found
              var hasValues = false
              // check all properties of item to see if any have non empty values
              _.each(item, value => {
                  if (!hasValues && typeof value === 'string' && value.length) {
                      hasValues = true
                  }
              })
              // if there are no values then remove last item from array
              if (!hasValues) {
                  data[field.property].pop()
              }
          }
          // otherwise set property as empty array
          else {
              data[field.property] = []
          }
      }
  }