The problem is that there is lots of existing code like this:
def __setitem__(self, index, value): ...
But the new features will almost certainly lead people to write new code like this:
d={}
obj[**d] = "foo" # no kwd arguments provided here
...which, if someone does this arbitrarily against classes that use the existing kind of code I gave at the first, will call (if the sentinel is () ):
obj.__setitem__((), "foo") # [Correction by Guido after Ricky's email]
...which could have all kinds of weird effects rather than giving an error, as I think would be better.
Steven's response to that was essentially "well then, don't unpack dictionaries against arbitrary subscriptable types" which I fully agree is a perfectly legitimate response. But I think having no sentinel at all and instead telling people "either provide a default argument for both index AND value in your __setitem__ method, or neither" is also a perfectly legitimate way forward.