As far as my understanding of your question allows me to perceive you are looking forward to deploying external contracts. However, you don’t seem to have details of how these contracts communicate.
The best possible way to do this is to define their interfaces without importing the contract code. All you can do is define the function interfaces and leave the function definitions empty.
You can do that by:
contract WidgetInterface {
function doSomething() returns(uint) {}
function somethingElse() returns(bool isTrue) {}
}
You can use this interface contract to communicate with actual contracts:
WidgetInterface wid = WidgetInterface(actualContractAddress);
You can also maintain a list of valid contracts that this interface successfully communicated with:
if(!isAuthorized(actualContractAddress)) throw;
Here, actualContractAddress is given by the sender and isAuthorized() is a function using which you can query an internal registry.