This seems to be a solution in search of a problem. If you handle sentinel default values early in a function then they are rarely problematic.
The general consensus so far seems to be that None and sentinel values
are good enough in practice and adding a new feature is
over-engineering, but I wouldn't go as far as calling it a solution in
search of problem. To me it looks similar to the motivation for
keyword-only arguments; as the PEP mentions, one can effectively have
keyword-only arguments with the idiom:
def compare(a, b, *ignore, key=None):
if ignore: # If ignore is not empty
raise TypeError
Thankfully, this didn't prevent the PEP from being accepted.
George