[guided]We now build the model and fix two technical points at the same time. First, every existential formula must be revisited with every finite tuple of parameters that appears later in the construction. Second, when density gives an isolating formula for an enlarged tuple, we must arrange that the old coordinates are the already chosen tuple, rather than merely some other realization of the same old type.
Work inside a sufficiently saturated and strongly homogeneous model $\mathfrak{U} \models T_A$. Because $L(A)$ is countable, the set of formulas is countable. Enumerate all existential patterns as
\begin{align*}
(\exists y_i\,\varphi_i(y_i,z_i))_{i \in \mathbb{N}},
\end{align*}
where $y_i$ is the tuple to be witnessed and $z_i$ is the tuple of parameter variables. To make sure that later parameters are not missed, we do not process each formula only once. Instead let $\mathbb{N}_{\geq 1}:=\{1,2,3,\dots\}$ and choose a surjection
\begin{align*}
\rho: \mathbb{N} \to \{(i,s) : i \in \mathbb{N},\ s \in \mathbb{N}_{\geq 1}^{|z_i|}\}
\end{align*}
such that every pair $(i,s)$ occurs infinitely many times. Here $s=(s_1,\dots,s_{|z_i|})$ is a positive index tuple telling us to substitute the chosen elements with those indices for the variables $z_i$. Repetition is the Henkin scheduling device: if the relevant parameters do not exist the first time a pair appears, the same pair appears again after they have been added.
We construct finite tuples
\begin{align*}
d_m=(d_{m,1},\dots,d_{m,\ell_m})
\end{align*}
and formulas $\delta_m(u_1,\dots,u_{\ell_m})$ such that $\delta_m$ isolates the complete type $\operatorname{tp}^{\mathfrak{U}}_{L(A)}(d_m/\varnothing)$. Begin with the empty tuple $d_0$ and the sentence $\delta_0 := (\top)$, which isolates the unique complete $0$-type.
At stage $m$, write $\rho(m)=(i,s)$ with $s=(s_1,\dots,s_{|z_i|})$. If some $s_j>\ell_m$, then the requested parameter has not yet been chosen, so this occurrence cannot define an instance. We set $d_{m+1}:=d_m$ and $\delta_{m+1}:=\delta_m$. If all indices exist, define the parameter tuple
\begin{align*}
d_m^s := (d_{m,s_1},\dots,d_{m,s_{|z_i|}}).
\end{align*}
If $\mathfrak{U} \models \neg \exists y_i\,\varphi_i(y_i,d_m^s)$, there is no witness to add for this instance, and again we set $d_{m+1}:=d_m$ and $\delta_{m+1}:=\delta_m$.
Now suppose $\mathfrak{U} \models \exists y_i\,\varphi_i(y_i,d_m^s)$. We want to add a witness while preserving the invariant that the enlarged finite tuple has isolated type. The formula
\begin{align*}
\delta_m(u) \wedge \varphi_i(y,u^s)
\end{align*}
is consistent, where $u=(u_1,\dots,u_{\ell_m})$ and $u^s=(u_{s_1},\dots,u_{s_{|z_i|}})$, because it is realized by $u=d_m$ together with some witness for $\varphi_i(y_i,d_m^s)$ in $\mathfrak{U}$. By density of isolated types in the finite Stone space of the variables $(u,y)$, choose a formula $\theta_m(u,y)$ which isolates a complete type over $\varnothing$ and strengthens this consistent formula:
\begin{align*}
T_A \models \forall u\,\forall y\bigl(\theta_m(u,y) \implies \delta_m(u) \wedge \varphi_i(y,u^s)\bigr).
\end{align*}
The density theorem gives a realization $(u^*,e^*)$ of $\theta_m(u,y)$ in $\mathfrak{U}$. At this point the old coordinates are $u^*$, not necessarily our actual tuple $d_m$. The reason this causes no problem is that $\theta_m(u,y)$ implies $\delta_m(u)$, and $\delta_m$ isolates the complete type of $d_m$. Therefore $u^*$ and $d_m$ realize the same complete type over $\varnothing$. Strong homogeneity of $\mathfrak{U}$ gives an automorphism $\sigma$ of $\mathfrak{U}$ such that $\sigma(u^*)=d_m$. Define $e_m:=\sigma(e^*)$. Applying $\sigma$ to the truth of $\theta_m(u^*,e^*)$ gives
\begin{align*}
\mathfrak{U} \models \theta_m(d_m,e_m).
\end{align*}
Since $\theta_m$ implies $\varphi_i(y,u^s)$, the tuple $e_m$ witnesses $\varphi_i(y_i,d_m^s)$. We set $d_{m+1}$ to be the tuple obtained by appending the coordinates of $e_m$ to $d_m$, and we set $\delta_{m+1}:=\theta_m$ with variables renamed to match the enlarged tuple.
Let
\begin{align*}
D := \bigcup_{m \in \mathbb{N}} \{d_{m,1},\dots,d_{m,\ell_m}\},
\end{align*}
and let $M$ be the $L(A)$-substructure of $\mathfrak{U}$ generated by $D$. The scheduling now proves the Henkin witness property first for parameters from $D$. Suppose $\mathfrak{U} \models \exists y_i\,\varphi_i(y_i,a)$ for a tuple $a$ from $D$. Choose $m_0$ large enough that all coordinates of $a$ occur in $d_{m_0}$, and let $s$ be the tuple of their indices in $d_{m_0}$. Because the pair $(i,s)$ occurs infinitely many times in $\rho$, some stage $m\geq m_0$ processes that same instance. At that stage the construction adds a witness from $D$.
We now pass from parameters in $D$ to parameters in the generated substructure $M$. If $b$ is a finite tuple from $M$, then each coordinate of $b$ has the form $\tau_j(a)$ for some finite tuple $a$ from $D$ and some $L(A)$-term $\tau_j$. Therefore an existential formula $\exists y\,\varphi(y,b)$ over $M$ is the same instance as the formula $\exists y\,\varphi(y,\tau(a))$ over parameters from $D$, where $\tau$ is the tuple of terms producing $b$. If this instance is realized in $\mathfrak{U}$, the previous paragraph supplies a witness from $D$, hence from $M$. Thus every existential formula over parameters from $M$ that is realized in $\mathfrak{U}$ has a witness in $M$. By the Tarski-Vaught criterion, $M \preccurlyeq \mathfrak{U}$, so $M \models T_A$.
Finally, take a finite tuple $r$ from $M$. Each coordinate of $r$ is obtained by applying an $L(A)$-term to finitely many elements of $D$, so there is some $d_m$ and a finite tuple of terms $\tau(u)$ such that $r=\tau(d_m)$. Since $\delta_m(u)$ isolates the complete type of $d_m$, the formula
\begin{align*}
\exists u\bigl(\delta_m(u) \wedge x=\tau(u)\bigr)
\end{align*}
isolates the complete type of $r$. Thus every finite tuple from $M$ realizes an isolated type over $\varnothing$, which is exactly atomicity of $M$.[/guided]