Dealing with missing genotype information has been a fundamental part of QTL analysis (for example the Lander and Botstein (1989) paper on interval mapping). If you are going to use a regression method that doesn't allow for missing covariate information, my main suggestion would be to use the approach of Haley and Knot (1992), which is to use genotype probabilities in place of the genotypes themselves.
If you need hard calls of genotypes, then the three basic methods are the ones you mentioned. But the main approach we take is to separate the sequence of true underlying genotypes, G_1, G_2, ..., G_M, from the observed marker genotypes O_1, O_2, ..., O_M, allowing for some constant genotyping error. viterbi finds the sequence G_i that maximizes the joint probability Pr(G | O). maxmarg just maximizes the marginal distribution Pr(G_i | O) at each position i. sim_geno simulates from the joint distribution.
If you set error_prob = 0, you should get imputed values that match the observed, but for technical reasons I think we force error_prob to be slightly >0 and so you may not be able to get the values to match exactly. The results of viterbi and sim_geno will have no missing values. To eliminate missing values from maxmarg results, you'd set minprob=0.
karl