code: function requireValidColumns (model, extraColumns) {
      assert.equal(typeof extraColumns, 'object', 'columns must be object')
      // clone arg since it may be modified
      extraColumns = _.cloneDeep(extraColumns)
      // validate each column definition
      _.each(extraColumns, (spec, name) => {
          // check if name is a default column name
          var defaultColumnName = model.columnName(name)
          // spec is for default column
          if (defaultColumnName) {
              // if spec is false then remove default column
              if (spec === false) {
                  // delete all entries for default column
                  delete model.columns[defaultColumnName]
                  delete model.defaultColumnsInverse[model.defaultColumns[defaultColumnName]]
                  delete model.defaultColumns[defaultColumnName]
                  // delete original entry in extra columns
                  delete extraColumns[name]
              }
              // otherwise override default values with spec
              else {
                  // merge spec over default
                  _.merge(model.columns[defaultColumnName], spec)
                  // delete original entry in extra columns
                  delete extraColumns[name]
              }
          }
          // spec is for extra column
          else {
              // get validated spec
              extraColumns[name] = requireValidColumn(name, spec)
          }
      })
  
      // return validated columns
      return extraColumns
  }
docs: /* private functions 
  @function requireValidColumns
  
  validate columns from model specification
  
  @param {object} ImmutableCoreModel
  @param {object} extraColumns
  
  @returns {object}
  
  @throws {Error}