1. How could I allow user to decide database name during DDT deployment?
Well, there are a number of ways to do this. In our medical application, we have a custom installer (see the Database Installer Sample for an idea about this) where we deploy our structures. During our installation, we check to see if this is a new install or another instance. If this is a new instance, we ask them for an instance name where we then tack on the instance name to the database (i.e. MyNewInstance_MyDatabaseName). You have 100% control of the database name if using the DatabaseMigrator class.
The second option would be to use the standard MDDeployMain dialog (also shown in the database installer sample) where there is a screen that let's the user enter any name they would like. But in either case, you can change the name to be whatever you like. The DatabaseMigrator class accepts an array with all of the names that will be deployed to...so it then just becomes a matter of you asking the end-user for the name at some point prior to the DDR deployment.
2. I have some view that join tables from local and remote database. The remote database name could be vary among customer even though it is has the same structure. How could I tell DDT at runtime so that it will "change" my view defination to map to the remote database?
One thing you may consider here is using the Pre/Post Deployment Scripts. You can implement any logic you need within this scripts. This might be a good example of where you would want to do this. Let the DDT deploy as it would normally, then in a post deployment script, you could execute some script that updates the view to whichever remote database you need. That would be one way of doing this.