Hola,
El problema es que guardas una referencia a un objeto y por lo tanto, cuando cambie el contenido del objeto se va reflejar en todos lados.
Es como decir que tienes un carro azul compartido con alguien, los dos ven que el carro es de color azul, pero si tu lo pintas de color rojo, todos lo van a ver de color rojo. Lo mismo sucede aquí, el objeto 'a' ...
Código:
Documento m = new Documento(a);
... está referenciado por todos los objetos de la clase Documento, ...
... cuando cambie cod porque quisiste que fuera el mismo objeto para reutilizarlo ...
Código:
this.numero = this.numero+1;
... todas las referencias van a ver que aumento en uno.
La única forma de corregirlo es que no guardes una referencia a un objeto que después vas a modificar y esperabas que mantuviera el valor anterior. Es decir, eso no es reutilizar un componente, porque mantiene un 'estado' que es único para cada objeto.
Saludos,