diff --git a/darglint/integrity_checker.py b/darglint/integrity_checker.py
index 729993d..1d24c0f 100644
--- a/darglint/integrity_checker.py
+++ b/darglint/integrity_checker.py
@@ -184,7 +184,7 @@ class IntegrityChecker(object):
         fun_type = self.function.return_type
         doc_type = self.docstring.get_types(Sections.RETURNS_SECTION)
         if not doc_type or isinstance(doc_type, list):
-            doc_type = ''
+            doc_type = None
         if fun_type is not None and doc_type is not None:
             if fun_type != doc_type:
                 line_numbers = self.docstring.get_line_numbers(

diff --git a/tests/test_integrity_checker.py b/tests/test_integrity_checker.py
index 53f6c8f..3d2b895 100644
--- a/tests/test_integrity_checker.py
+++ b/tests/test_integrity_checker.py
@@ -288,6 +288,40 @@ class IntegrityCheckerTestCase(TestCase):
         self.assertEqual(error.expected, 'int')
         self.assertEqual(error.actual, 'float')
 
+    def test_return_type_unchecked_if_not_defined_in_docstring(self):
+        program = '\n'.join([
+            'def foo() -> str:',
+            '    """Just a foobar.',
+            '',
+            '    Returns:',
+            '        bar',
+            '',
+            '    """',
+            '    return "bar"',
+        ])
+        tree = ast.parse(program)
+        functions = get_function_descriptions(tree)
+        checker = IntegrityChecker()
+        checker.run_checks(functions[0])
+        self.assertEqual(len(checker.errors), 0)
+
+    def test_return_type_unchecked_if_not_defined_in_function(self):
+        program = '\n'.join([
+            'def foo():',
+            '    """Just a foobar.',
+            '',
+            '    Returns:',
+            '        str: bar',
+            '',
+            '    """',
+            '    return "bar"',
+        ])
+        tree = ast.parse(program)
+        functions = get_function_descriptions(tree)
+        checker = IntegrityChecker()
+        checker.run_checks(functions[0])
+        self.assertEqual(len(checker.errors), 0)
+
     def test_return_type_checked_if_defined_in_docstring_and_function(self):
         program = '\n'.join([
             'def update_model(x: dict) -> dict:',

I203 raised for return type annotations.
`darglint` raises an error (`I203 Return type mismatch:  ~Return: expected str but was `) when return type annotations are provided without a declared docstring return type. This is likely an oversight, this check should only fire if _both_ a type annotation and docstring type declaration are present.

Failure example:

```
def foo() -> str:
    """Just a standard foobar.

    Returns: Bar.
    
    """
    return "bar"
````
tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_return_type_unchecked_if_not_defined_in_docstring
tests/test_integrity_checker.py::IntegrityCheckerSphinxTestCase::test_missing_parameter tests/test_integrity_checker.py::IntegrityCheckerSphinxTestCase::test_variable_doesnt_exist tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_arg_types_checked_if_in_both_docstring_and_function tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_bare_noqa tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_excess_parameter_added tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_excess_yield_added_to_errors tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_extra_raises_added_to_error tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_global_noqa tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_global_noqa_works_for_syntax_errors tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_incorrect_syntax_raises_exception_optionally tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_missing_parameter_added tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_missing_raises_added_to_error tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_missing_return_parameter_added tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_missing_yield_added_to_errors tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_noqa_after_excess_raises tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_noqa_excess_return tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_noqa_for_excess_parameters tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_noqa_for_excess_yield tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_noqa_for_missing_parameters tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_noqa_for_missing_raises tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_noqa_for_missing_yield tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_noqa_for_parameter_type_mismatch tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_noqa_for_parameter_type_mismatch_by_name tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_noqa_for_return_type_mismatch tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_noqa_missing_return_parameter_added tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_return_type_checked_if_defined_in_docstring_and_function tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_return_type_unchecked_if_not_defined_in_function tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_skips_functions_without_docstrings tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_throws_assertion_if_no_colon_in_parameter_line tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_throws_assertion_if_no_content_after_colon tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_try_block_no_excess_error tests/test_integrity_checker.py::IntegrityCheckerTestCase::test_yields_from_added_to_error