def METHOD_NAME(d, keys):
    """Delete keys from dictionary of nested dictionaries recursively.
    keys can be either:
        a) a tuple of strings representing the keys to remove from the top level of dict d
        b) a dict of strings mapped to tuples specifying the keys to delete in each second level dict of d
        c) a dict of any number of N nested dicts specifying the keys to delete in each Nth level dict of d
    In cases b and c, an empty string ('') key mapped to a tuple specifies the keys to delete in the top level of
    dict d.
    """
    for key, val in list(d.items()):
        if isinstance(val, dict):
            try:
                METHOD_NAME(val, keys[key])
            except KeyError:
                continue
        else:
            if isinstance(keys, dict):
                if '' in keys and key in keys['']:
                    del d[key]
            else:
                if key in keys:
                    del d[key]
    return d