def METHOD_NAME(
    target_dict: dict, current_path: List[str] = None
) -> Tuple[List[Tuple[str]], List[str]]:
    key_paths: List[Tuple[str]] = []
    full_paths: List[Tuple[str]] = []
    for key, value in target_dict.items():
        if isinstance(value, dict):
            if current_path:
                next_path = current_path[:]
                full_paths.append(tuple(next_path))
                next_path.append(key)
                full_paths.append(tuple(next_path))
            else:
                next_path = [key]
            if value:
                new_key_paths, new_full_paths = METHOD_NAME(
                    value, next_path
                )
                key_paths.extend(new_key_paths)
                full_paths.extend(new_full_paths)
            else:
                # If this is an empty dictionary, then there will be no further nested keys to gather.
                key_paths.append(tuple(next_path))
                full_paths.append(tuple(next_path))
        else:
            if current_path:
                next_path = current_path[:]
                next_path.append(key)
                key_paths.append(tuple(next_path))
                full_paths.append(tuple(next_path))
            else:
                full_paths.append((key,))
                key_paths.append((key,))
    return key_paths, full_paths