Regarding the empty names, I think it would have been to save a little (tiny) bit of space. The compiler and language probably supported it and then I guess it was up to the developers as to whether they chose to "blank" or shorten the name. It is already fairly clear to me that some of the class names are shortened from their original, such as PV, which is clearly the PicView mentioned in the Official Book of King's Quest, and Act, which is Actor. Obj itself could be short for Object. Anything that is abbreviated or truncated is likely to be a shorter version of the original source name. Some other examples:
Rm = Room
Rgn = Region
SL = StatusLine
Rev = Reverse
Fwd = Forward
CT = CycleTo
Blk = Block
Given that the "name" is a property (admittedly a special property), it's default value could probably be overridden, even with a blank value it would seem. The very existence of blank names is almost proof that there was a way to override the name property.
The interpreter itself doesn't really need the names, so I'm assuming that the name property was mainly for debugging purposes.
What also seems clear is that they didn't use this ability to override and shorten the name property all the time. A lot of the classes clearly have their original names, such as Feature, Script, View, Prop, Event, List, Set, Motion, MoveTo.
Regarding inheriting from 0xffff (i.e. nothing), this suggests a super class even more super than Obj that exists within the interpreter kernel itself. For a while I've been wondering if it was called RootObj since this string appears within the SCIV.EXE, but I can't seem to make the interpreter or its debugger display this string. Does anyone know when the interpreter would display this? I show its context within the SCIV.EXE below:
Objects
Fragments
Resources
Free Heap
Proc
size:%d
max:%d
cur:%d
PMach
size:%d
max:%d
cur:%d
Stack
%02x%c
%c %c
Inspect :: $%04x
RootObj
super: %s
%s:%d
%s:$%x
Inspect :: %s ($%x)
%s not a Collection.
%s is empty.
%s :: %s
Selector
%s: not selector for %s.
Property