docs: function (object) {
      var pattern;
  
      if (object instanceof Array) return parseObject.value(object)
  
      pattern = new ObjectPattern
  
      pattern.properties = Object
        .keys(object)
        .map(function (key) {
          var value = parseObject.value( object[key] )
  
          if (key === "*")
            return new WildcardProperty(value)
  
          if (key.substring(0, 1) === "!")
            if (key.substring(1) === "*")
              return new Negator(
                new WildcardProperty( value ) )
            else
              return new Negator(
                new ExactProperty( key.substring(1), value ) )
  
          return new ExactProperty(key, value)
        })
  
      return pattern
    }