J.J. McCarthy was back at quarterback for the Vikings and threw for three TDs and ran for another in an upset of the Lions.