You have to make sure the plot is wide enough, else some of the breaks will be omitted. See the examples below to see the difference.
Example 1:
png(filename = 'scatterplot1.png', width = 800, height = 400)
plot(Ahm5 ~ days, dat, col = 'blueviolet', type = "p", pch = 1, cex=.5, xlab = "Year", xaxt='n', ylab = "Rainfall (mm/Day)")
axis.Date(side = 1, at = seq(as.Date("1961/1/1"), by = "year", length.out = 47))
dev.off()
gives:

Example 2:
png(filename = 'scatterplot2.png', width = 600, height = 300)
plot(Ahm5 ~ days, dat, col = 'blueviolet', type = "p", pch = 1, cex=.5, xlab = "Year", xaxt='n', ylab = "Rainfall (mm/Day)")
axis.Date(side = 1, at = seq(as.Date("1961/1/1"), by = "year", length.out = 47))
dev.off()
gives:

Example 3:
png(filename = 'scatterplot3.png', width = 400, height = 200)
plot(Ahm5 ~ days, dat, col = 'blueviolet', type = "p", pch = 1, cex=.5, xlab = "Year", xaxt='n', ylab = "Rainfall (mm/Day)")
axis.Date(side = 1, at = seq(as.Date("1961/1/1"), by = "year", length.out = 47))
dev.off()
gives:

As you can see the breaks differ between the plots and R chooses which breaks to use. To have nicer breaks, you can use:
png(filename = 'scatterplot4.png', width = 800, height = 400)
plot(Ahm5 ~ days, dat, col = 'blueviolet', type = "p", pch = 1, cex=.5, xlab = "Year", xaxt='n', ylab = "Rainfall (mm/Day)")
axis.Date(side = 1, at = seq(as.Date("1965/8/1"), by = "5 year", length.out = 9))
dev.off()
which gives:

Now you have:
- Nicer breaks
- The ticks are aligned in the middle of the yearly 'scatter-piles'.
UPDATE: A further elaboration on the last example:
png(filename = 'scatterplot5.png', width = 800, height = 400)
plot(Ahm5 ~ days, dat, col = 'blueviolet', type = "p", pch = 1, cex=.5,
xlab = "Year", xaxt='n', ylab = "Rainfall (mm/Day)")
axis.Date(side = 1,
at = c(seq(as.Date("1960/8/1"), by = "10 year", length.out = 5),
as.Date('2007-08-01')))
dev.off()
which gives:
