I recently read a paper on end2end functionality, thx Noah for the pointer. It argues that a variety of functionality that we think can be pushed down a level, actually has to be done at an application level. Therefore, any work done by a lower level is really an optimization rather than a refactoring of the application functionality. It could even be a premature or inappropriate optimization to do work in the lower levels. A good example is a file transfer protocol that must do reliability checking, even if the "network" provides reliable delivery.
This is particularly interesting for any folks working on reliability protocols such as WS-ReliabilityExchange. The paper says that doing message delivery to the target host isn't very interesting, what is important is the applications answer of "did it" or "didn't do it". WS-RX takes great pains to be separate from the application and only talks about guaranteeing delivery to the target host. Other interesting topics are duplicate detection, security, in-order, transaction mgmt. Kind of like the grab-bag of the latest WS-* message specs.