Como saber se o buffer de emissão da serial esta vazio

O problema é que isso não é visto com registos...

Ou seja, quando fazes um Serial.print(), o que acontece é que todos esses dados vão para um buffer na memória do Arduino e depois o código da porta série vai transmitindo um a um à medida que as interrupções de envio (existe um registo a indicar o buffer vazio) vão sendo processadas.

Então podes, através de registos (bit TXC0 no registo UCSRA) saber quando um caracter foi enviado.

Para saberes quantos caracteres estão por enviar no buffer, podes usar o método availableForWrite() e calcular com base no tamanho do buffer os caracteres que estão por enviar.

Ou seja, se o retorno dessa função for o tamanho do buffer, ele está vazio.

Já agora, na minha instalação o tamanho do buffer é de 16 bytes para chips com menos de 1k de RAM e 64 bytes para chips com mais de 1k de RAM.

Não sei se isto responde à tua pergunta.