Можно ли добавить уникальное ограничение к полям с естественным идентификатором, чтобы только непустые значения были уникальными, но допускали наличие нескольких нулей?
Да . Похоже, это поведение по умолчанию, в соответствии с документами
Как правило, уникальное ограничение нарушается, когда в таблице две или более строки, в которых значения всех столбцов, включенных в ограничение, равны. Однако нулевые значения не считаются равными в этом сравнении. Это означает, что даже при наличии уникального ограничения можно хранить повторяющиеся строки, которые содержат нулевое значение, по крайней мере, в одном из ограниченных столбцов. Такое поведение соответствует стандарту SQL, но мы слышали, что другие базы данных SQL могут не следовать этому правилу. Поэтому будьте осторожны при разработке приложений, предназначенных для переносимости.
http://www.postgresql.org/docs/8.1/static/ddl-constraints.html