Eu acho que você está no caminho certo. Nem jogar, capturar nem documentar todas as exceções potencialmente lançáveis faz muito sentido. Há momentos em que o rigor do produto exige um alto grau de emprego e documentação de exceção (por exemplo, certos aspectos críticos de segurança de um sistema).
A estratégia de ser mais defensivo, usando conceitos de contrato para identificar condições prévias (e pós-condições) em chamadores especialmente a jusante (por exemplo, qualquer coisa que se assemelhe a um membro público ou protegido) será frequentemente mais eficaz e mais flexível. Isso se aplica não apenas à implementação, mas à documentação. Se os desenvolvedores souberem o que é esperado, é mais provável que eles sigam as regras e menos propensos a confundir ou abusar do código que você escreveu.
Algumas das coisas comuns que devem ser documentadas incluem o caso de parâmetros nulos. Muitas vezes, há uma consequência para o uso deles que leva o resultado a algo que normalmente não seria esperado, mas que é permitido e usado por várias razões, às vezes por flexibilidade. Como consumidor de um membro que possui parâmetros que permitem valores nulos ou outros valores não racionais especiais (como tempo negativo ou quantidades negativas), espero vê-los identificados e explicados.
Para parâmetros não nulos, como consumidor de um membro público ou protegido, quero saber que nulo não é permitido. Quero saber qual é o intervalo válido de valores no contexto fornecido. Quero saber as conseqüências do uso de valores que estão fora do intervalo normal, mas que são válidos em um contexto de chamada diferente (por exemplo, o valor do tipo geralmente é válido para qualquer operação, mas não aqui - como um parâmetro booleano que não espere falso como um valor válido.
No que diz respeito à plataforma ou às interfaces bem conhecidas, não acho que você precise ir ao extremo ao documentá-lo. No entanto, como você tem a oportunidade, como desenvolvedor, de variar a implementação de qualquer orientação da plataforma, observe como isso pode ser útil.
Específicas para IDisposable, as implementações dessa interface geralmente oferecem um método alternativo preferido ao processo de descarte explícito. Nesses casos, destaque o método preferido e observe que a eliminação explícita não é preferida.