A: 

Just a thought: whatever you do, completely code 3 states first (with 2 you're still tempted to repeat identical code, with more it's too time-consuming if you decide to change the design).

I must admit I'm completely ignorant about rules or WF. But wouldn't it be possible to just have one big stupid ASP.Net include file with instructions for states separated from main logic without any additional language/program?

Edit: Or is it just the fact that each state has quote a lot a completely different functionality, not just some bits?

ilya n.
+1  A: 

Start with the Strategy design pattern, which basically allows you outline a "placeholder", to be replaced by concrete classes at runtime.

You'll have to sketch out a clear interface between the core app and the "plugins", and you have each strategy implement that. Then, at runtime, when you know which state the user is working on, you can instantiate the appropriate state strategy class (perhaps using a factory method), and call the generic methods on that, e.g. something like

IStateStrategy stateStrategy = StateSelector.GetStateStrategy("TX"); //State id from db, of course...
stateStrategy.Process(nationalData);

Of course, each of these strategies should use the existing data layer, etc.

The (apparent) downside with this solution, is just that you'll be hardcoding the rules for each state, and you cannot transparently add new rules (or new states) without changing the code. Don't be fooled, that's not a bad thing - your business logic should be implemented in code, even if its dependent on runtime data.

AviD
Btw, just a note for all you doubting thomases - here (finally) is a perfect example of the value of design patterns :-)
AviD