It seems to me the difference between the pair $(X,A)$ being a good pair and having the HEP is very slight, so this answer is meant as more of a comment to illustrate the differences.
Hatcher (in "Algebraic Topology", just after Theorem 2.13) defines $(X,A)$ to be a good pair if
$X$ is a space and $A$ is a nonempty closed subspace that is a deformation retract of some neighborhood in $X$.
In the same text, soon after Example 0.14, he defines the pair $(X,A)$ to have the homotopy extension property if, here for only $A$ a subspace of $X$ (no condition on $A$ being closed or non-empty),
$X\times \{0\}\cup A\times I$ is a retract of $X\times I$.
Most other sources do not use the phrase "good pair" and simply stick to HEP. One such source (in my opinion, the best source) is May. There (in "A Concise Course in Algebraic Topology", Chapter 6, Section 1), still only assuming $A$ is a subspace of $X$, the pair $(X,A)$ along with a map (not necessarily the inclusion) $i:A\to X$, is defined to have the homotopy extension property if
$i:A\to X$ is a cofibration.
In Section 4 of the same chapter, now assuming $A$ is closed in $X$, May shows that $(X,A)$ is a neighborhood deformation retract pair if and only if
- $X\times \{0\}\cup A\times I$ is a retract of $X\times I$, or
- the inclusion $i:A\hookrightarrow X$ is a cofibration.
In fact, now it seems Hatcher's definitions of good pair and having the HEP are equivalent from May's viewpoint. That's why, in my opinion, the phrase "good pair" is not the best approach to use, and instead we should talk about cofibrations that are or are not inclusions.
It's definitely doable. Let's consider a simpler example first: let $X=[0,1]$, and let $A=\{0\}$.
You can retract $X\times I$ (a square) to $(X\times\{0\})\cup(A\times I)$ (the union of the "bottom" and "left" sides of the square) by projecting each point along the ray from $(2,2)$:
To move this intuition to your example of $X=$ a disk and $A=$ a smaller disk inside $X$, just "swing this around" (as one would to form a solid of revolution) and leave the interior of $A$ alone.
For fun:
PlotACylinder[RadiusOfA_, Height_, theta_, u_] :=
{RadiusOfA*Cos[theta], RadiusOfA*Sin[theta], Height*u}
PlotATop[RadiusOfA_, Height_, theta_, u_] :=
{RadiusOfA*u*Cos[theta], RadiusOfA*u*Sin[theta], Height}
PlotX[RadiusOfX_, theta_, u_] :=
{RadiusOfX*u*Cos[theta], RadiusOfX*u*Sin[theta], 0}
PlotTopSurface[RadiusOfA_, RadiusOfX_, Height_, t_, theta_, u_] :=
Module[{x, y},
x = RadiusOfA + (RadiusOfX - RadiusOfA) u;
y = 2 Height*(1 - (2 RadiusOfX - 2 RadiusOfA)/(2 RadiusOfX - RadiusOfA - x))
+ Height*(2 RadiusOfX - 2 RadiusOfA)/(2 RadiusOfX - RadiusOfA - x);
{(x (1 - t) + RadiusOfA*t)*Cos[theta], (x (1 - t) + RadiusOfA*t)*Sin[theta],
Height (1 - t) + y*t}]
PlotSideSurface[RadiusOfA_, RadiusOfX_, Height_, t_, theta_, u_] :=
Module[{x, y},
y = Height*u;
x = (2 RadiusOfX - RadiusOfA)*(1 - (2 Height/(2 Height - y)))
+ RadiusOfX (2 Height/(2 Height - y));
{(RadiusOfX (1 - t) + x*t)*Cos[theta], (RadiusOfX (1 - t) + x*t)*Sin[theta],
y (1 - t)}]
PlotRetract[RadiusOfA_, RadiusOfX_, Height_, t_] := ParametricPlot3D[
{PlotACylinder[RadiusOfA, Height, theta, u],
PlotATop[RadiusOfA, Height, theta, u],
PlotX[RadiusOfX, theta, u],
PlotTopSurface[RadiusOfA, RadiusOfX, Height, t, theta, u],
PlotSideSurface[RadiusOfA, RadiusOfX, Height, t, theta, u]},
{theta, 0, 2 Pi}, {u, 0, 1}, Mesh -> None, Axes -> None,
Boxed -> False, PlotPoints -> 30,
Lighting -> {{"Directional", White, {{1, 1, 1}, {0, 0, 0}}}},
PlotStyle -> {Gray, Gray, Gray, Directive[Blue, Opacity[0.5]],
Directive[Blue, Opacity[0.5]]}]
Export["animation.gif", Table[PlotRetract[1, 3, 4, Max[0, t]],
{t, -0.1, 0.98, 0.02}], "DisplayDurations" -> {0.125}]
Best Answer
No, take a circle relative the complement of one point. You can embed the circle into $\mathbb{R}$ at time 0, and then homotope the complement into an open line segment. This cannot be extended to a homotopy of the circle since you cannot even extend the function at time 1 to the whole circle.
One requirement of the HEP is to be closed.