Mi è venuta in mente questa idea e mi interesserebbe un feedback da parte vostra a riguardo. 
Per obbligare una classe ad avere un costruttore default (public e senza parametri), mi sono costruito una marker interface generica con constructor constraint:
public interface IDefaultConstructor<T> where T : new() {}
e quindi basta che la classe Foo implementi IDefaultConstructor per essere sicuri in fase di compilazione che essa abbia un costruttore default:
class Foo : IDefaultConstructor<Foo>
{
      public Foo() // garantito!
      {
            // ...
      }
 
      // altri costruttori...
      public Foo(int i)
      {
            //...
      }
 
      // il resto dei membri
}