Ok, I think I've found the solution myself:
curl ftp://ftp.ensembl.org/pub/release-91/fasta/mus_musculus/dna/Mus_musculus.GRCm38.dna.chromosome.19.fa.gz > chr19.fa.gz
zcat chr19.fa.gz > chr19.fa
curl ftp://ftp-mouse.sanger.ac.uk/current_snps/strain_specific_vcfs/BALB_cJ.mgp.v5.indels.dbSNP142.normed.vcf.gz > dir.raw.vcf.gz
zcat dir.raw.vcf.gz > dir.raw.vcf
grep '^#' dir.raw.vcf > dir.vcf
grep -v '^#' dir.raw.vcf | sed 's/,[GTCA]*//' > dir.hap.vcf
cat dir.hap.vcf | awk 'BEGIN{OFS="\t"} \
{ if(length($4)>length($5)) {min=length($5)} else { min=length($4) } } \
{ print $1,$2+min-1,$3,substr($4,min),substr($5,min),$6,$7,$8,$9,$10 }' \
> dir.hap.clean.vcf
sort -k1,1 -k2,2n dir.hap.clean.vcf > dir.hap.sort.vcf
grep -v '^#' dir.hap.sort.vcf | awk 'BEGIN{pos=0; chr=1} \
{ if($1!=chr) {chr=$1; pos=0} } \
{if($2>pos) { print $0; pos=$2-(length($5)-length($4)) } }' \
>> dir.vcf
bgzip -f dir.vcf && tabix -p vcf dir.vcf.gz
bcftools consensus -f chr19.fa dir.vcf.gz > chr19.alt.fa
zcat dir.vcf.gz | grep '^#' > alt.vcf &&
zcat dir.vcf.gz | grep -v '^#' | awk 'BEGIN{OFS="\t"; chr=1; i=0} \
{ if($1!=chr) {chr=$1; i=0} } \
{print $1,$2+i,$3,$5,$4,$6,$7,$8,$9,$10; i=i+length($5)-length($4)}' \
>> alt.vcf
bgzip -f alt.vcf && tabix -p vcf alt.vcf.gz
bcftools consensus -f chr19.alt.fa alt.vcf.gz > chr19.dir2.fa
cmp --silent chr19.dir2.fa chr19.fa && echo "Files are identical." || echo "Files are different."
This solutions deals with (i.e. removes) alternative haplotypes and overlapping indels (i.e. alternative haplotypes in practice). Of course, one might want to handle these differently, e.g. mask the offending (likely heterozygous) regions completely.
I guess you can use FastaAlternateReferenceMaker from GATK, but other way around.
Could you elaborate? This tool just "merges" reference fasta and a vcf file, and does not produce a new vcf file, as far as I can tell.