function addSchema(schema, key, _skipValidation, _meta) {
    if (Array.isArray(schema)){
      for (var i=0; i<schema.length; i++) addSchema(schema[i], undefined, _skipValidation, _meta);
      return;
    }
    // can key/id have # inside?
    key = resolve.normalizeId(key || schema.id);
    checkUnique(key);
    self._schemas[key] = _addSchema(schema, _skipValidation, _meta, true);
  }
Adds schema to the instance.
@param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.
@param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.
@param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead.
@param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.