2. Scatter the hazelnuts on a baking sheet and toast until deep golden brown, 10 to 15 minutes. Tip the hazelnuts onto a plate to cool.
3. Measure 1 cup hazelnuts, coarsely chop them, and set aside. Finely grind the remaining 2 cups hazelnuts in a food processor. Pour the milk and cream into a saucepan and bring to a simmer over medium heat. Remove the pan from the heat, stir in the finely ground hazelnuts, and let steep for 1 hour.
4. Strain the nut mixture through a fine-mesh sieve into another saucepan, pressing on the solids before discarding them. Add 1/2 cup sugar and bring to a simmer over medium heat, stirring until the sugar dissolves.
5. Place the yolks, salt, and remaining 1/4 cup sugar in a medium bowl and whisk until thick and pale yellow. Whisk in the cocoa. Gradually ladle about 1 cup hot milk mixture into the yolk mixture, whisking constantly. Stir the warm yolk mixture into the hot milk in the saucepan. Reduce the heat to low and cook, stirring constantly, until the custard is thick enough to coat the back of the spoon and registers between 175°F (79°C) and 180°F (82°C) on an instant-read thermometer, 3 to 5 minutes.
6. Strain the custard into a bowl. Add the liqueur and vanilla and set aside to cool, stirring frequently, until room temperature. Cover and refrigerate until completely chilled, about 4 hours. (This will keep in the refrigerator for up to 2 days.)
7. Churn the custard in an ice cream maker, following the manufacturer’s directions. Just before the gelato has finished churning, add the reserved chopped hazelnuts, letting the paddle stir them in. Transfer the gelato to a container with a lid, cover, and freeze for a couple of hours or until it is just firm. Scoop at will.