Are there any major architectural differences when designing applications that will be built on static languages (such as C# or Java) and dynamic languages (such as Ruby or Python)?
It's slightly easier to write fancy frameworks for dynamic languages. But that's not an application thing.
Which are the design possibilities that might be a good choice for one type that's a bad one for the other?
You can write good things in either kind language.
Are there any useful features achievable with one type that's not with the other (in design and architecture, of course)?
The difference is that dynamic languages are "write, run, fix". You can experiment and fix quickly.
Static languages are "write, compile, build, run, fix". You can't experiment as easily.
Other than that, they're nearly identical in their capabilities.
Are there any dynamic-specific design patterns?
Maybe. The Python
execfile() functions -- in a way -- point up a dynamic language feature that's difficult (but far from impossible) to handle in a static language. It would be a lot more lines of code to compile and execute code in the same process space.
It's not dynamic-language specific. It's just easier.