Null würde nur mit Referenztypen funktionieren. Bei generischen Methoden können auch Werttypen (wie zB int) verwendet werden. Bei Werttypen ist null nicht möglich -> daher wird default verwendet.
default gibt für Werttypen 0 und für Referenztypen null zurück.
Wenn du null verwenden willst kannst du den generischen Typ einschränken:
public T Foo() where T : class { T returnValue = null; //code return returnValue; }