The original Doom was developed on NeXT, so a lot of the tooling (like DoomEd) was written in ObjC. If I recall correctly they abused this whole thing by making proxy objects that would happily call methods across the network, so they had level cooperative editing back in the early 90s (minus all the concurrent edit stuff we take for granted today, of course).
I was trying to google for some sort of reference to what I meant, but couldn't find one (found this thread instead...) but NSProxy seems to have been around long enough that it might well be the core of the implementation for what I was talking about.
Yes and no. Concurrency was still a problem that got short shrift. But the "overload doesNotUnderstand:, serialize the message and dispatch it over the network" was a fun way to do rpc-ishness in Smalltalk and ObjC before people got hung up on writing IDLs. (Looking at you, CORBA)
I'm reminded of Larry Wall's quote: "languages differ not in what they make possible, but in what they make easy."