Right, the programs don't see those empty strings because the shell is stripping them when it parses the line. But for options, for the shell parser to strip away the empty string presumes that the user made a mistake and has needlessly/erroneously provided a useless empty string.
In the case for read -d'' very probably the user has attempted to supply the null delimiter, but read quietly takes the next argument. I think it makes sense to bump empty strings away from the option when they occur after options in the Bash interpreter parsing of the commandline.