Mario Pasalic sealed victory for Milan after Donnarumma had spurned Dybala.
Juve's Mario Mandzukic also missed from the spot-kick, with Gianluca Lapadula reprieved having failed to convert for Milan.
Captain Giorgio Chiellini put Juve ahead 18 minutes, but Giacomo Bonaventura levelled with a header prior to half-time.
Alessio Romagnoli hit the bar for Milan as Vincenzo Montella's men shaded the second half, before having to withstand heavy Juve pressure as 30 minutes of extra time failed to produce a winner.
The win on penalties mean Milan now join Juve in having won the trophy a record seven times, with Montella claiming his first silverware with the Rossoneri.