Good question.
My opinion is that the developer should be handling the exceptions that they are aware of (and perhaps responsible for) at the layer they are working. If they create any new exceptions then they are responsible for passing that data along in their docs so the consumer can handle them properly.
Yes, the developer should always have some idea about what kind of exceptions can occur, but that doe snot mean that they HAVE to handle them ALL. They should however be able to accept them and at very least not die when they happen. It all really depends (hows that for being clear? :) ) on the layer you are working.