[proofplan]
We compute the entries of the matrix product $NN^\top$. Each entry is the dot product of two rows of the incidence matrix, so it counts blocks containing the corresponding point or pair of points. The diagonal entries are the replication number $r$, while the off-diagonal entries are $\lambda$ by the defining pair condition of a $2$-design. Although $k$ is part of the design data, this identity uses only the number $r$ of blocks through one point and the number $\lambda$ of blocks through two distinct points. These are exactly the entries of $(r-\lambda)I_v+\lambda J_v$, where $I_v$ is the $v\times v$ identity matrix and $J_v$ is the $v\times v$ all-one matrix.
[/proofplan]
[step:Compute each entry of the point Gram matrix by counting common incident blocks]
Let $X=\{x_1,\dots,x_v\}$ be the point set of $\mathcal D$. Let $B_1,\dots,B_b$ be an indexing of the blocks of $\mathcal D$, where $b$ denotes the number of blocks. By the definition of the incidence matrix $N$, for each $i \in \{1,\dots,v\}$ and each $\ell \in \{1,\dots,b\}$, the entry $N_{i\ell}$ equals $1$ if $x_i \in B_\ell$ and equals $0$ otherwise.
For indices $i,j \in \{1,\dots,v\}$, the $(i,j)$ entry of $NN^\top$ is
\begin{align*}
(NN^\top)_{ij} = \sum_{\ell=1}^{b} N_{i\ell}(N^\top)_{\ell j} = \sum_{\ell=1}^{b} N_{i\ell}N_{j\ell}.
\end{align*}
Since $N_{i\ell}$ and $N_{j\ell}$ are $0$-$1$ incidence indicators, the product $N_{i\ell}N_{j\ell}$ equals $1$ exactly when both $x_i \in B_\ell$ and $x_j \in B_\ell$, and equals $0$ otherwise.
If $i=j$, this sum counts the blocks containing $x_i$. By the definition of the replication number, there are exactly $r$ such blocks, so
\begin{align*}
(NN^\top)_{ii}=r.
\end{align*}
If $i \ne j$, this sum counts the blocks containing both distinct points $x_i$ and $x_j$. Since $\mathcal D$ is a $2$-$(v,k,\lambda)$ design, every two distinct points lie together in exactly $\lambda$ blocks, so
\begin{align*}
(NN^\top)_{ij}=\lambda.
\end{align*}
[guided]
We prove the identity by comparing entries, so we first make the indexing explicit. Let $X=\{x_1,\dots,x_v\}$ be the point set of $\mathcal D$. Let $B_1,\dots,B_b$ be an indexing of the blocks of $\mathcal D$, where $b$ denotes the number of blocks. By the definition of the incidence matrix $N$, for each $i \in \{1,\dots,v\}$ and each $\ell \in \{1,\dots,b\}$, the entry $N_{i\ell}$ equals $1$ if $x_i \in B_\ell$ and equals $0$ otherwise.
Fix indices $i,j \in \{1,\dots,v\}$. Since $N$ is a $v \times b$ matrix and $N^\top$ is a $b \times v$ matrix, the definition of matrix multiplication gives
\begin{align*}
(NN^\top)_{ij} = \sum_{\ell=1}^{b} N_{i\ell}(N^\top)_{\ell j} = \sum_{\ell=1}^{b} N_{i\ell}N_{j\ell}.
\end{align*}
Now interpret this sum combinatorially. For each block index $\ell \in \{1,\dots,b\}$, the entry $N_{i\ell}$ records whether $x_i$ belongs to $B_\ell$, and $N_{j\ell}$ records whether $x_j$ belongs to $B_\ell$. Therefore the product $N_{i\ell}N_{j\ell}$ is equal to $1$ precisely for those blocks $B_\ell$ that contain both relevant points, and is equal to $0$ for all other blocks. Hence the full sum counts the number of blocks containing both $x_i$ and $x_j$.
There are two cases. First suppose $i=j$. Then the sum counts the blocks containing the single point $x_i$. Because the replication number is $r$, every point of $X$ lies in exactly $r$ blocks. Thus
\begin{align*}
(NN^\top)_{ii}=r.
\end{align*}
Second suppose $i \ne j$. Then $x_i$ and $x_j$ are distinct points of the point set $X$. The defining property of a $2$-$(v,k,\lambda)$ design says that every pair of distinct points lies together in exactly $\lambda$ blocks. Applying that property to the pair $\{x_i,x_j\}$ gives
\begin{align*}
(NN^\top)_{ij}=\lambda.
\end{align*}
This gives the full entrywise description of $NN^\top$: its diagonal entries are $r$, and its off-diagonal entries are $\lambda$. The matrix $(r-\lambda)I_v+\lambda J_v$ has the same entries, because $I_v$ has diagonal entries $1$ and off-diagonal entries $0$, while $J_v$ has every entry equal to $1$. Therefore the two matrices are equal:
\begin{align*}
NN^\top=(r-\lambda)I_v+\lambda J_v.
\end{align*}
[/guided]
[/step]
[step:Identify the counted entries with the claimed matrix]
The matrix $(r-\lambda)I_v+\lambda J_v$ has diagonal entries equal to $(r-\lambda)\cdot 1+\lambda\cdot 1=r$ for every $i \in \{1,\dots,v\}$, since $I_v$ and $J_v$ both have diagonal entry $1$. It has off-diagonal entries equal to $(r-\lambda)\cdot 0+\lambda\cdot 1=\lambda$ for every pair $i,j \in \{1,\dots,v\}$ with $i \ne j$, since $I_v$ has off-diagonal entry $0$ and $J_v$ has off-diagonal entry $1$. These entries agree with the entries of $NN^\top$ computed above. Therefore
\begin{align*}
NN^\top=(r-\lambda)I_v+\lambda J_v.
\end{align*}
[/step]