More generally, I'm not convinced that it's the best idea to have
standard procedures to test for a single port. It's often useful to wait
for multiple things at once, and waiting for only one thing can be done
as a special case of that.
I'm not disagreeing with you here, but your argument is about the utility of u8-ready? char-ready? themselves.
Of course, if I'm writing a large program talking to character devices, network pipes, and files all at once, I will use an infrastructure better suited for polling many channels at once. And I admit that while I have faithfully implemented {u8,char}-ready? in my own implementation and tested them, I have written no programs that make effective use of them.
If we are to honor R7RS, with u8-ready? and char-ready? I think we are obligated to support their implementation in custom ports as well, otherwise, we are declaring those procedures deprecated and useless (which may be a valid decision).