You know, neither of these is really very satisfying. The first is ambiguous. There are any number of reasons why Foo could be nil, and a weak dependency is only one of them. My problem with the second one isn't so much the verbosity, it's that it also says "yes, the caller is well aware that class lookups go through a single global dictionary called Smalltalk." That is, it knows too much about the implementation of the compiler and runtime.
I think it would be nice to have something like this:
Foo ifPresent: [:foo | foo bar]
ifAbsent: [self mumble]
This idiom clearly says what it means, "the dependency is a weak one" without saying more than that.
I like it but it's ambigious too if for any reason the value of Foo understands the message. The point is that the #ifPresent: message really is meta in the sense that it ought to be sent to the variable Foo instead of the value Foo.
Cheers, - Andreas