Application Blocks are such code libraries which is build up on optimized design patterns against common programming scenarios which need to be done in almost every application. Thus it provides the platform suitable for a wide variety of application types and architectures.
A good Application block should :
Enforces consistent development patterns
Provide a good level of abstraction between the business logic and the common scenario which is implemented in the current application block, so that we can easily plug this into any application