Almog Cohen and Dario Lezcano put Ingolstadt 2-0 up before half-time.
Dortmund striker Pierre-Emerick Aubameyang reduced the deficit shortly before the hour mark but Lezcano notched his second moments later.
Adrian Ramos netted for Dortmund with 20 minutes left and Pulisic headed home in added time to complete the comeback.
The result meant Dortmund slipped to sixth place in the Bundesliga on 14 points.
Match ends, FC Ingolstadt 04 3, Borussia Dortmund 3.
Second Half ends, FC Ingolstadt 04 3, Borussia Dortmund 3.
Attempt missed. Pierre-Emerick Aubameyang (Borussia Dortmund) header from the centre of the box is close, but misses to the right. Assisted by Felix Passlack.
Goal!  FC Ingolstadt 04 3, Borussia Dortmund 3. Christian Pulisic (Borussia Dortmund) right footed shot from very close range to the bottom right corner.
Attempt saved. Lukasz Piszczek (Borussia Dortmund) header from the centre of the box is saved in the centre of the goal. Assisted by Felix Passlack.
Corner,  Borussia Dortmund. Conceded by Almog Cohen.
Substitution, FC Ingolstadt 04. Alfredo Morales replaces Lukas Hinterseer.
Attempt missed. Marc Bartra (Borussia Dortmund) header from the centre of the box is close, but misses to the left. Assisted by Mario Götze with a cross following a corner.
Corner,  Borussia Dortmund. Conceded by Florent Hadergjonaj.
Attempt saved. Pierre-Emerick Aubameyang (Borussia Dortmund) right footed shot from the centre of the box is saved in the centre of the goal. Assisted by Ousmane Dembélé.
Corner,  Borussia Dortmund. Conceded by Ørjan Nyland.
Attempt saved. Mario Götze (Borussia Dortmund) right footed shot from the centre of the box is saved in the bottom right corner. Assisted by Adrián Ramos with a headed pass.
Julian Weigl (Borussia Dortmund) wins a free kick in the defensive half.
Foul by Lukas Hinterseer (FC Ingolstadt 04).
Felix Passlack (Borussia Dortmund) wins a free kick in the defensive half.
Foul by Moritz Hartmann (FC Ingolstadt 04).
Attempt missed. Christian Pulisic (Borussia Dortmund) header from the centre of the box misses to the right. Assisted by Felix Passlack.
Hand ball by Christian Pulisic (Borussia Dortmund).
Attempt missed. Ousmane Dembélé (Borussia Dortmund) right footed shot from outside the box is too high. Assisted by Mario Götze following a corner.
Corner,  Borussia Dortmund. Conceded by Ørjan Nyland.
Attempt saved. Felix Passlack (Borussia Dortmund) right footed shot from outside the box is saved in the bottom right corner. Assisted by Mario Götze.
Delay over. They are ready to continue.
Delay in match Almog Cohen (FC Ingolstadt 04) because of an injury.
Corner,  Borussia Dortmund. Conceded by Florent Hadergjonaj.
Substitution, Borussia Dortmund. Felix Passlack replaces Shinji Kagawa.
Hand ball by Christian Pulisic (Borussia Dortmund).
Hand ball by Lukas Hinterseer (FC Ingolstadt 04).
Substitution, FC Ingolstadt 04. Mathew Leckie replaces Darío Lezcano.
Adrián Ramos (Borussia Dortmund) is shown the yellow card for a bad foul.
Foul by Adrián Ramos (Borussia Dortmund).
Florent Hadergjonaj (FC Ingolstadt 04) wins a free kick in the defensive half.
Foul by Marc Bartra (Borussia Dortmund).
Moritz Hartmann (FC Ingolstadt 04) wins a free kick on the right wing.
Goal!  FC Ingolstadt 04 3, Borussia Dortmund 2. Adrián Ramos (Borussia Dortmund) right footed shot from the centre of the box to the centre of the goal. Assisted by Christian Pulisic.
Delay over. They are ready to continue.
Delay in match Lukas Hinterseer (FC Ingolstadt 04) because of an injury.
Foul by Mario Götze (Borussia Dortmund).
Almog Cohen (FC Ingolstadt 04) wins a free kick on the left wing.
Attempt blocked. Almog Cohen (FC Ingolstadt 04) right footed shot from outside the box is blocked.
Mario Götze (Borussia Dortmund) wins a free kick in the defensive half.
Borussia Dortmund midfielder Christian Pulisic scored a dramatic injury-time equaliser to rescue a point against Bundesliga strugglers Ingolstadt.