As per Ian, for ChIP-seq, I have also always marked PCR / optical duplicates with Picard MarkDuplicates. You can then literally eliminate them from the BAM files with SAMtools:
#Identify and mark duplicates, and index new BAM
java -jar MarkDuplicates.jar INPUT=Aligned_Sorted.bam OUTPUT=Aligned_Sorted_PCRDupes.bam ASSUME_SORTED=true METRICS_FILE=Aligned_Sorted_PCRDupes.txt VALIDATION_STRINGENCY=SILENT ;
samtools index Aligned_Sorted_PCRDupes.bam ;
#Expunge marked duplicate reads, and then index new BAM
samtools view -b -F 0x400 Aligned_Sorted_PCRDupes.bam > Aligned_Sorted_PCRDuped.bam ;
samtools index Aligned_Sorted_PCRDuped.bam ;
As always, however, each experiment is unique and has its own intricacies. It may not, therefore, always be appropriate to eliminate reads that are identified as duplicates.