The Bluejays (20-4, 10-2 Big East) have won five of six and 15 of 17, and are now within a half game of No. 6 Villanova in the conference standings.
Kellen Dunham had 16 points and Alex Barlow added 13 for Butler (12-13, 2-11), which has lost four straight.
After leading most of the first half, Creighton found itself in a back-and-forth struggle most of the second half and couldn't fend off Butler's charges until McDermott hit the 3 to make it 64-63.
Andrew Chrabascz had two chances to give Butler a late lead but twice lost the ball and a 3 from Dunham that might have forced overtime was short.
Butler hasn't won at home since Jan. 18, but this was a stark contrast from Tuesday night's blowout loss to Xavier.
The Bulldogs repeatedly fought back and made things tough on McDermott, who passed Allan Houston and Kevin Bradshaw to move into 15th place on the NCAA's career scoring list. He now has 2,824 points.
The Bluejays led most of the first half, then found themselves in a mightier second-half struggle than just about anyone anticipated.
Butler tied the score on Barlow's first shot of the second half, a 3-pointer, and took the lead when Barlow hit a short runner on Butler's next possession.
The teams traded leads on each of the next five baskets and were playing dead even—until Creighton's 3-point shooters warmed up. Austin Chatman and Jahenns Manigat hit back-to-back shots from behind the arc and after Will Martino made 1 of 2 free throws, Manigat closed out the 10-3 spurt with another 3. That made it 54-47 with 12:30 to play.
Again, Butler rallied. Elijah Brown hit a 3 and Dunham put it in a layup and hit a midrange jumper to tie it at 54.
McDermott broke the tie with a 3, and Chrabascz tied it again with a 3 from just left of the top the key with 4 minutes left. That's how it stayed until Khyle Marshall banked in a 5-footer with 1:13 left to Butler a 63-61 lead that riled up the fans.
But McDermott hit the late 3 and the Bulldogs didn't score again as Creighton closed it out at the free-throw line.