docs: function (key, create) {
                  if (typeUtils.isString(key)) {
                      if (!this._stringKeys && create)
                          this._stringKeys = {};
                      return this._stringKeys;
                  } else if (typeUtils.isNumber(key)) {
                      if (!this._numberKeys && create)
                          this._numberKeys = {};
                      return this._numberKeys;
                  } else if (key != null && (typeof(key) == "object" || typeUtils.isFunction(key))) {
                      // don't use typeUtils.isObject here to be more general (it also accepts RegExp, Date, Array ...)
                      if (!this._objectKeys && create)
                          this._objectKeys = {};
                      return this._objectKeys;
                  } else {
                      if (!this._otherKeys && create)
                          this._otherKeys = {};
                      return this._otherKeys;
                  }
              }