def METHOD_NAME(self, obj, root):
    """Recursively resolves all references in a schema against
    ``self.resolvers``.
    :param obj: The object to recursively resolve.
    :param root:
        The containing root of :param:`value`. This needs to be
        passed in order to resolve self-referential $refs,
        e.g. ``#/def``.
    :returns: A denormalized/resolved version of :param:`obj`.
    """
    if isinstance(obj, dict):
        for key in obj.copy().keys():
            if key == '$ref':
                refs = obj.pop(key)
                self.resolve_local_refs(refs, obj, root)
        return {k: self.METHOD_NAME(v, root) for k, v in obj.items()}
    elif isinstance(obj, list):
        return [self.METHOD_NAME(item, root) for item in obj]
    else:
        return obj