So far the most interesting idea I've encountered in Smalltalk is the focus on late binding. Most object-oriented languages have static type systems that bind at compile time. This results in very inflexible systems that don't adapt well to change. Smalltalk on the other hand is practically type-less and binds methods to objects at the last possible moment. Basically, you can send any message to any object and you only find out if it works at runtime when the object either understands the message or doesn't.
Of course, that's the same way Perl works! Seeing the way that Smalltalk exploits this property to build object systems that can be reorganized at runtime is very interesting to me. I think that if I let this stuff stew long enough I'll eventually be able to integrate it into my OO design methodology. And if that happens, watch out!