RE: empty subscripts:
Should something be allowed syntax?
In a way this comes down to design philosophy vs implementation.
From an implementation perspective, the  operator is another way to call __getitem__ and __setitem__. And from that perspective, why not have it act like a function call: no arguments, positional arguments, keyword arguments, the whole shebang.
But from a language design perspective, the  operator is a way to "index" a container -- get part of the container's contents. And from this perspective, no index makes no sense.
I like to think of the dunders as an implementation detail, so no, the square brackets have a distinct meaning that is different from the parentheses, and should not have the same features.
another way to think of it is that we shouldn't encourage folks to "abuse" the  as simply an alternative way to call the object.