Solving an unwieldy inheritance framework function I have a simple inheritance framework:

class BaseValidator
{ 
    protected virtual void Validate()
    { 
        // Base validator code .....
    }
}
class PhoneValidator:BaseValidator
{
    public override void Validate()
    {
        base.Validate();
        // custom validation logic...
    }
}
class EmailValidator:BaseValidator
{
    public override void Validate()
    {
        base.Validate();
        // custom validation logic...
    }
}


The problem is in //custom validation logic. The more custom validation logic code that is written , the more unwieldy the 
Validate() function becomes. I can organize custom validation logic into separate functions, but that would be another mess.

public override void Validate()
{
    base.Validate();
    CustomValidation1();
    CustomValidation2();
    CustomValidation3();
    ...
}


What are other patterns\practices that I can use to manage the Validate() function?  Sometimes I feel this is a the problem with inheritance, but suggestions are welcome in any direction.
Take a look at the specification pattern (pdf). 

In particular, Microsoft has already implemented this kind of framework as part of one of their (old) application blocks. You can look there for many related ideas.