I’ve noticed a string of questions and answers months or even years old being downvoted without comments or any explanation for why. This includes some of my own answers that were well-received at the time. Is there any way to monitor or enforce this? We need to make it clear to new users that an explanation via comment should be given for downvoting answers.
I sympathize with your concern about unexplained downvotes; it isn't cool.
The Stack Exchange platform does not enable us to enforce a standard behaviour around downvoting. Anyone who gains the vote down privilege (125 rep) will be able to downvote without being required to explain their behaviour, and that's just how the platform works. It's possible to change this threshold, but it should not be undertaken lightly.
What we can do is guide our userbase as a whole toward the behaviour we expect as a community. The help note for vote-down already informs people of the expected behaviour:
Down-voting should be reserved for extreme cases. It's not meant as a substitute for communication and editing. Instead of voting down: If something is wrong, please leave a comment or edit the post to correct it.
This problem has already been discussed on Stack Exchange Meta and the conclusion was to add a popup note asking people to "please consider adding a comment if you think this post can be improved".
High rep users have access to moderator tools which reveals questions and answers that have the lowest net score. But the moderator tools don't have any more advanced facilities that might reveal serial downvoting by a specific user, nor can they identify questions that are the most controversial.
To answer those more advanced queries, we would need to turn to the Stack Exchange Data Explorer. Here are a few examples:
A quick review of these queries suggest that we really don't have anything major to worry about.