def METHOD_NAME(self, error, value=None, data=None):
    """
    Adds an error to the meta data at the current path. The ``error``
    argument is converted to string. If optional ``data`` is specified, the
    data hash is stored alongside the error.
    If an optional ``value`` is specified, it is attached as original value
    into the meta data. Note that there is only one original value, not one
    per error.
    If no meta data entry exists for the current path, it is created, along
    with the entire parent tree.
    """
    meta = self.create()
    if "err" not in meta or meta["err"] is None:
        meta["err"] = []
    error = str(error)
    if isinstance(data, Mapping):
        error = [error, dict(data)]
    meta["err"].append(error)
    if value is not None:
        meta["val"] = value